Database-Design
引用表數據不變時外鍵的使用
我必須設計一個表格,其中使用者有 10 個欄位,6 個是下拉列表。有些是單選,有些是多選。下拉數據應該很少更改。
例如,向使用者呈現一周中的幾天並且可以選擇任意天數。這將是一個一對多的表
UserDayPref(user_id, day)
。現在我有3個選擇:
- 創建表 Days 並在table
UserDayPref
的外鍵中創建 day 欄位Days
。- 將日期欄位設為字元串並保存日期的名稱。
- 將當天的名稱映射到整數並保存整數。
我傾向於為此和所有其他下拉欄位實施第三個選項。我很確定數據很少會被編輯。
這是正確的方法嗎?還是使用外鍵是正確的方法?
即使您想使用第三個選項,您也可以擁有外鍵。
就像在您的範例中一樣,您正在討論一周中的哪幾天它們永遠不會改變。
在除一周中可能發生變化的日子以外的情況下,我認為您必須使用外鍵以保持數據庫完整性。
選項 1 是您的最佳選擇,只需確保 Days 表有一個簡單的類型 id 列,然後您將在 UserDayPref 表中引用該列。如果 UserDayPref 表變大,將 ID 欄位保持為一個簡單的值將節省空間並進行快速連接。
如果您選擇選項 3,您實際上是將部分數據移動到應用程式碼中,因為您將在程式碼中而不是在數據庫,它們真正屬於的地方。這就是關係數據庫的用途;-)
所以,基本上選擇這樣的東西(使用oracle語法)
CREATE TABLE USERS ( id int primary key, name varchar2(10) ) / CREATE TABLE days ( id char(1) primary key, name varchar2(10) ) / CREATE TABLE option1 ( id char(1) primary key, name varchar2(10) ) / CREATE TABLE option2 ( id char(1) primary key, name varchar2(10) ) / CREATE TABLE UserDayPref(user_id INT references users(id), day_id char(1) references days (id), option1_id char(1) references option1 (id), option2_id char(1) references option2 (id))