Database-Design
如何建立二對一表關係(PK-FK-CK)?
我的問題是關於數據庫設計及其原則。我正在開發一個 Python 應用程序,其中對象映射到數據庫表。
我有
Projects
和People
對象,映射到各自的表。然後我有Messages
,也映射到自己的表。A
message
可以屬於person
(people 表) 或project
(projects 表) (n-1)。我的問題:
- 我應該為消息和查詢創建兩列 -
belongs_to_id
和belongs_to_type
- 以獲取它們嗎?要麼;- 我應該為每個人創建一個關聯表——people_have_messages 和項目有消息嗎?
- 在這種情況下,正確的工作方式是什麼?
- 如果我使用第一個選項,如何創建 FK 約束和約束?
我的問題是,由於項目和人員(人員表)都可以具有相同的 PK(ID),如果不說明表就不足以引用,我不知道具體該怎麼做。
表:
People: -------------- ID (PK unique) Name Projects: -------------- ID (PK unique) Title Description Message: -------------- ID (PK unique) Text
我會說這取決於人員和項目之間是否存在聯繫?
從您提到的內容來看,我會正確使用:
Projects -> ProjectsToMessage <- Message
和People -> PeopleToMesseage <- Message
類型結構(你的要點2)
除非項目和人員之間存在關係,在這種情況下,您最終可能會遇到一些數據庫不喜歡的循環依賴。但是,在這種情況下,我會質疑消息是否可以在不通過人員的情況下與項目相關聯。