Mysql

與其他兩個相關的表(三向關係?)

  • February 21, 2018

我偶然發現了一個奇怪的情況,一個表與另外兩個表有關係,但其中的記錄只能與其中一個表有關係。為了澄清事情,我有表格:attribute, visit, visit_action. visit是的父母visit_action- 在一次訪問中,使用者可以執行多個操作。訪問和操作都具有由name和組成的屬性value。一個人attribute可以與兩者都相關,visitvisit_action不能同時與兩者相關。一次訪問可以包含多個屬性,操作也是如此。我應該如何將這些關係保存在數據庫中?

選項 1 創建兩個連接表,例如visit_attributevisit_action_attribute都與關係到attribute但一個與關係到visit和一個到visit_action。我對這個解決方案的問題是,一個屬性最終可能會同時visit與兩者綁定visit_action,我不希望這樣。 兩個連接表

選項 2id_visit使用和id_visit_action直接在表中 創建列attribute。這似乎很合適,因為attribute不能與許多訪問或操作相關,但仍然存在問題,它最終可能會同時與一次訪問和一項操作相關聯。感覺很糟糕,表中的一列attribute總是NULLid_visit或者id_visit_action)。 屬性表中的連接

還有第三種選擇:

創建表visit_attributevisit_action_attribute在每個表中創建namevalue列(並attribute完全刪除表)。

這消除了給定屬性同時連結到 avisit和 a的可能性,visit_action不需要具有 NULL 值的 id 列。

引用自:https://dba.stackexchange.com/questions/198120