2016-03-30 46 views
0

我有幾個表存儲我的系統的相應記錄。例如,可能有一個名爲templateslogos的表。但是對於每個表,其中一行將是系統中的默認值。我通常會爲每個表添加一個is_default列,但除1之外的所有行都是0MySQL - 存儲系統默認值

我的另一位同事看到另一條路線,其中有一張system_defaults表格。該表格每個表格都有一列。例如,該表格將有一個template_id列和一個logo_id列。然後該列存儲相應的默認值。

一種比另一種更正確嗎?第一種方法是,除了1之外,還有許多具有相同值的列。第二,我想我只需要進行連接以獲取詳細信息,並且每當添加一個具有默認值的新表時,表就會橫向增長。

+0

爲每種方法提供'SHOW CREATE TABLE',以及一些示例行。同時告訴我們關於將獲取數據的'SELECTs'。 –

回答

1

這些解決方案主要不同之處在於確保爲每個表分配不超過一個默認值。

  • is_default解決方案:這可能發生,一個表的多個記錄的值爲1,這取決於你的數據庫的SQL方言,這是否可以通過限制被排除在外。據我瞭解MySQL,這種約束不能在那裏表達。

  • 單獨的表格解決方案:在這裏,您可以很容易地通過您的表格設計確保每個表格最多隻有一個默認值。通過分配not null約束,您還可以強制或不強制特定表的默認值。當你引入一個新表時,無論如何你都要擴展你的數據庫(和它的軟件),所以default表上的附加屬性不會受到影響。

中庸之道可能如下:有一個表

Defaults 
id 
table_name 
row_id 

每桌一個記錄,該表名稱標識。從技術上講,每個表格有多個默認值的問題也可能發生在這裏。但是,如果只有在引入新表時將記錄插入此表中,那麼您的操作軟件將只需在此表上執行更新,而不會插入。您可以通過代碼檢查輕鬆進行檢查。

+0

太棒了,謝謝你的解釋。 – kenshin9