Mysql
與其他兩個相關的表(三向關係?)
我偶然發現了一個奇怪的情況,一個表與另外兩個表有關係,但其中的記錄只能與其中一個表有關係。為了澄清事情,我有表格:
attribute
,visit
,visit_action
.visit
是的父母visit_action
- 在一次訪問中,使用者可以執行多個操作。訪問和操作都具有由name
和組成的屬性value
。一個人attribute
可以與兩者都相關,visit
但visit_action
不能同時與兩者相關。一次訪問可以包含多個屬性,操作也是如此。我應該如何將這些關係保存在數據庫中?選項 1 創建兩個連接表,例如
visit_attribute
和visit_action_attribute
都與關係到attribute
但一個與關係到visit
和一個到visit_action
。我對這個解決方案的問題是,一個屬性最終可能會同時visit
與兩者綁定visit_action
,我不希望這樣。選項 2
id_visit
使用和id_visit_action
直接在表中 創建列attribute
。這似乎很合適,因為attribute
不能與許多訪問或操作相關,但仍然存在問題,它最終可能會同時與一次訪問和一項操作相關聯。感覺很糟糕,表中的一列attribute
總是NULL
(id_visit
或者id_visit_action
)。
還有第三種選擇:
創建表
visit_attribute
並visit_action_attribute
在每個表中創建name
和value
列(並attribute
完全刪除表)。這消除了給定屬性同時連結到 a
visit
和 a的可能性,visit_action
不需要具有 NULL 值的 id 列。