2016-04-28 64 views
0

我有一個由(非抽象)類「Candidate」繼承的抽象類「Person」,後者有幾個子類:保留候選人(面試),被錄取的候選人......我怎樣才能在數據庫中表示這一點?
謝謝如何在關係數據庫中表示具有層次繼承的類

+0

這是繼承的不正確使用。一個人可能扮演候選人的角色,但並不總是,並且一直是候選人。使用組合。一個人扮演很多角色,其中一個角色可能是候選人。他們的地位也不應該是一個亞型。請使用「狀態」欄 –

+0

謝謝您的回答,您的意思是由組成請 – hereForLearing

+0

我的意思是不使用繼承:)你會想要一個人與PersonRoles之間的one2many關係 –

回答

0

如果沒有很多數據項,只需製作一個帶有類型字段的表。如果有許多列或變體,則爲變體創建表並將它們鏈接到主表。

+0

我會這樣做,如果只有一個層次級別(即如果有例如只有承認和保留的候選人繼承人),但現在我有兩個層次級別,我不知道如何去做 – hereForLearing

1

這是繼承的不正確使用。一個人可能扮演候選人的角色,但並不總是,並且一直是候選人。使用組合。一個人扮演很多角色,其中一個角色可能是候選人。他們以後可以成爲一名員工。他們的地位也不應該是一個亞型。爲此使用「狀態」列。

事情是這樣的:

create table people (
    person_id int primary key, 
    name text, 
    ... 
); 

create table person_roles (
    person_id int references people(person_id), 
    type text check (type in ('Candidate', '...')), 
    candidate_status text check (candidate_status in ('Retained','Admitted')), 

    primary key (person_id, type) 
); 

正確的使用繼承的是人延伸AbstractLegalParty。組織或公司也將擴展AbstractLegalParty。

+0

爲什麼你已經包括鍵入主鍵?並順便說一句,你在這個例子中是正確的我只舉了一個例子,在我的UML類圖中,我有以下結構:由Candidate,Staff和Admin繼承的Person(抽象類),候選者有兩個子類:承認並保留候選人,這是正確的嗎? – hereForLearing

+0

@saywow允許一個人擁有多個角色,但只有一個給定類型的角色 –

+0

因此,我將在我的UML中表示由候選人,工作人員和管理員繼承的Person(抽象類),並且候選人通過以下方式繼承:保留候選人,當我想在數據庫中表示這一點時,我會按照你的說法做,這是正確的嗎?如果人員,成員,候選人......都具有相同的層級,那麼這不會看起來像? – hereForLearing