Mysql
如何實現有限制的關聯
我正在研究有用植物的 SQL 數據庫。我希望能夠允許使用者使用一組分層類別和標籤來註釋植物。例如:
**類別:**醫藥
- **身體部位:**胃
- **疾病:**腸易激綜合徵
初始數據庫結構可以是:
植物
植物標籤
標籤
我想限制可以一起使用的類別和標籤。例如,如果選擇了類別,則應該只能應用
body part
anddisease
標籤。此外,如果medicine
選擇了標籤,則應該只能選擇標籤。disease: IBS``body part: stomach
換句話說,我想要一種方法來指定哪些標籤組合是有效的。
這可能在數據庫級別嗎?
編輯:
使用者還應該能夠在不標記植物的情況下對其進行分類。例如:
植物
編輯2:
以下是一組不應被允許的標籤的範例:
pneumonia
是肺病,不是胃病,所以有兩個標籤stomach
,pneumonia
不應該被允許。
有幾種方法可以解決這個問題,但最簡單的方法可能是創建一個維度組合表。這樣的表預先填充了所有有效的可能組合(by
id
),然後這是您的應用程序控制項(例如下拉菜單等)的來源,因為當您過濾該表中的一個維度時,只有剩余維度的有效條目將可用。例如,您的維度組合表將包含一
plant_category_id
列和一列tag_type_id
,可能還有第二tag_type_id2
列(或者,如果您對錶進行規範化,維度組合Tags
表中的列命名會更好一些)。您可以做的另一件事是實現一個複雜的檢查約束(可能使用函式),但這可能比它的價值更多,並且取決於您使用的 MySQL 和版本的實現。
第三種方法是處理儲存過程中的邏輯,這些邏輯通過您要實現的邏輯來管理數據訪問,但可能也需要大量工作,尤其是要隨著時間的推移進行維護。因此,使它成為表驅動的第一個建議將是我的第一選擇。