Mysql

如何實現有限制的關聯

  • February 8, 2021

我正在研究有用植物的 SQL 數據庫。我希望能夠允許使用者使用一組分層類別和標籤來註釋植物。例如:

  • **類別:**醫藥

    • **身體部位:**胃
    • **疾病:**腸易激綜合徵

初始數據庫結構可以是:

植物

植物標籤

標籤

我想限制可以一起使用的類別和標籤。例如,如果選擇了類別,則應該只能應用body partanddisease標籤。此外,如果medicine選擇了標籤,則應該只能選擇標籤。disease: IBS``body part: stomach

換句話說,我想要一種方法來指定哪些標籤組合是有效的。

這可能在數據庫級別嗎?

編輯:

使用者還應該能夠在不標記植物的情況下對其進行分類。例如:

植物

編輯2:

以下是一組不應被允許的標籤的範例:

pneumonia是肺病,不是胃病,所以有兩個標籤stomachpneumonia不應該被允許。

有幾種方法可以解決這個問題,但最簡單的方法可能是創建一個維度組合表。這樣的表預先填充了所有有效的可能組合(by id),然後這是您的應用程序控制項(例如下拉菜單等)的來源,因為當您過濾該表中的一個維度時,只有剩余維度的有效條目將可用。

例如,您的維度組合表將包含一plant_category_id列和一列tag_type_id,可能還有第二tag_type_id2列(或者,如果您對錶進行規範化,維度組合Tags表中的列命名會更好一些)。


您可以做的另一件事是實現一個複雜的檢查約束(可能使用函式),但這可能比它的價值更多,並且取決於您使用的 MySQL 和版本的實現。


第三種方法是處理儲存過程中的邏輯,這些邏輯通過您要實現的邏輯來管理數據訪問,但可能也需要大量工作,尤其是要隨著時間的推移進行維護。因此,使它成為表驅動的第一個建議將是我的第一選擇。

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