我有兩種「用戶」的一般類型,Person
和Page
。他們可以執行相同的操作(投票,評論,發帖等),但它們具有本質上不同的信息。簡而言之,Person
具有first_name
,last_name
,gender
和birthday
。 A Page
有一個title
,description
和basic_info
。如何用兩用外鍵重構數據庫架構
人都和頁面可以在整個系統進行相同動作,所以在設計數據庫模式的時候,我覺得有必要涉及一切回到中央id
列。否則,我認爲系統的複雜性會急劇增加(雖然也許我說這是不正確的)。
鑑於此,我希望有一個「映射」表。例如,我們稱這個表Map
。 Map
有一個id
(所有標識的中心標識),destination_id
(個人或頁面的標識,取決於下一列...)和type
(個人或頁面)。
例如,如果type
是「Person」,我知道要查看User表,並且如果type
是「Page」,我知道要查看Page表以獲取必要的信息。
我對此設計不滿意,因爲它引入了「雙用途外鍵」。 - 我在Map
表中有一個「外鍵」,它可以引用任意數量的其他表。
如何重構,這樣我可以:
- 最好,允許添加額外的user_types(人員,信息頁,然後組,例如)
- 擺脫雙的目的外鍵
另一種可能:已在Map
表兩列,page_id
和person_id
,這兩者都是實際的外鍵,但其中只有一個不爲空。無論哪個不是null顯然都是正確的user_type信息(Page或Person)的真正外鍵。
這似乎是中等合理的,但它並不一定滿足我的第一個條件,因爲我喜歡「乾淨」,而且它看起來相當笨拙。
我該如何重構這個?
頁面是用戶? – attila
可以將頁面視爲用戶。我會編輯,希望更清晰。 – JohnZ