我有一個由(非抽象)類「Candidate」繼承的抽象類「Person」,後者有幾個子類:保留候選人(面試),被錄取的候選人......我怎樣才能在數據庫中表示這一點?
謝謝如何在關係數據庫中表示具有層次繼承的類
回答
如果沒有很多數據項,只需製作一個帶有類型字段的表。如果有許多列或變體,則爲變體創建表並將它們鏈接到主表。
我會這樣做,如果只有一個層次級別(即如果有例如只有承認和保留的候選人繼承人),但現在我有兩個層次級別,我不知道如何去做 – hereForLearing
這是繼承的不正確使用。一個人可能扮演候選人的角色,但並不總是,並且一直是候選人。使用組合。一個人扮演很多角色,其中一個角色可能是候選人。他們以後可以成爲一名員工。他們的地位也不應該是一個亞型。爲此使用「狀態」列。
事情是這樣的:
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。
爲什麼你已經包括鍵入主鍵?並順便說一句,你在這個例子中是正確的我只舉了一個例子,在我的UML類圖中,我有以下結構:由Candidate,Staff和Admin繼承的Person(抽象類),候選者有兩個子類:承認並保留候選人,這是正確的嗎? – hereForLearing
@saywow允許一個人擁有多個角色,但只有一個給定類型的角色 –
因此,我將在我的UML中表示由候選人,工作人員和管理員繼承的Person(抽象類),並且候選人通過以下方式繼承:保留候選人,當我想在數據庫中表示這一點時,我會按照你的說法做,這是正確的嗎?如果人員,成員,候選人......都具有相同的層級,那麼這不會看起來像? – hereForLearing
- 1. 用關係數據庫中的「多重繼承」來表示分層關係
- 2. 表每層次和繼承關係
- 3. EF4.1創建具有按層次繼承表的數據庫的例外
- 4. 如何在UML類圖中顯示私有繼承關係
- 5. 如何將類層次結構(基類和繼承類)映射到數據庫
- 6. 如何在關係數據庫中進行繼承建模?
- 7. 層次繼承
- 8. 何時隱藏具體類中的繼承層次結構?
- 9. 類表繼承與層次結構
- 10. C++中繼承的類層次
- 11. 具有類繼承的數據模型
- 12. 如何在關係數據庫中表示「活動組」關係?
- 13. 如何在(Neo4j)圖形數據庫中表示繼承?
- 14. 如何保存在數據庫領域多層次關係
- 15. 多層次繼承
- 16. 具有虛函數的C++繼承層次結構
- 17. 如何將兩個不同的數據庫表合併到EF中的單個繼承類層次結構中?
- 18. 如何配置Hibernate數據庫反向工程工具來映射數據庫表關係作爲entites繼承?
- 19. C#繼承 - >的類層次結構
- 20. 模板類層次的朋友繼承
- 21. C#類Quadrilateral的繼承層次結構?
- 22. 調用不同類的繼承層次
- 23. 類繼承層次的設計問題
- 24. 生成繼承層次的依賴關係樹
- 25. 具有繼承性的Grails域類之間的關係
- 26. 如何在SQL數據庫中表示層次結構
- 27. SQLAlchemy子類/繼承關係
- 28. 不同層次的檢查(表示層,中間層,數據庫)
- 29. Django-Nonrel:非關係數據庫不支持多表繼承
- 30. 如何將數據從數據庫表中放入具有EF繼承類的實體中?
這是繼承的不正確使用。一個人可能扮演候選人的角色,但並不總是,並且一直是候選人。使用組合。一個人扮演很多角色,其中一個角色可能是候選人。他們的地位也不應該是一個亞型。請使用「狀態」欄 –
謝謝您的回答,您的意思是由組成請 – hereForLearing
我的意思是不使用繼承:)你會想要一個人與PersonRoles之間的one2many關係 –