[英]Relational Database design for repeat data in a few columns
這是我正在使用的數據類型:有用戶數據,例如電子郵件ID,年齡等:
並且有特定於應用程序的設置數據(不透明度,速度,音量等),這些數據具有默認值,但用戶可以自由更改默認值並根據需要定制應用程序。
我希望可以選擇更改現有用戶的默認值,而無需在users表中針對每個用戶進行更改。
有什么好的方法?
Table: USERS user_data_1|user_data_2| ... |setting_1|setting_2| ... |default_settings
Table: USERS user_data_1|user_data_2| ... |setting_id Table: SETTINGS setting_id|setting_1|setting_2| ...
謝謝。
您的第一個設計更具關系性。 每個設置都屬於其自己的列,並具有適當的列名稱,數據類型和DEFAULT
。 我認為不需要最后一列default_settings
。 每列要么具有DEFAULT
值,要么具有非默認值。
但是,該設計的缺點是,每當需要引入新設置時,都需要使用ALTER TABLE
添加新列。 並且表中的列數有實際的限制。 可能有多值設置,很難在一列中建模。
對於用戶設置,我經常看到的是第二個表,該表引用了第一個表。 每個用戶在第二個表中都有很多行,每個設置一行:
Table USERS
user_data_1|user_data_2| ...
Table SETTINGS
user_id|setting_name|setting_value
這種設計允許僅通過插入新行就可以為每個用戶啟用無限數量的新設置,而無需使用ALTER TABLE
添加新列。
默認值保存在應用程序代碼中。 也就是說,對於每個設置,如果給定用戶的數據庫中不存在該設置,則應用程序代碼將采用合理的默認值。
此設置表基本上是一個“鍵值”存儲,它具有不同的問題:
DEFAULT
存儲在列定義中。 NOT NULL
, UNIQUE
或FOREIGN KEY
類的SQL約束的能力。 但是,這種模式在這種情況下仍然非常流行。
基於@BillKarwin的建議。 我決定選擇選項1。
Table: USERS
user_data_1|user_data_2| ... |setting_1|setting_2| ...
設置列中的默認值將為NULL,表示需要從配置文件中讀取這些設置。 如果用戶自定義設置,則NULL將替換為用戶定義的值。 這樣可以方便地在每個設置的基礎上為所有用戶在一個位置更改默認值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.