Schema
創建包含許多可選欄位的表
我是一名開發人員(學生),正在尋找一些關於在創建表以對具有多個可選欄位的實體進行建模時應該遵循的最佳方法的建議。
需要對
Organization
具有幾個關鍵欄位(例如id
和)的實體進行建模name
。還有一個連接表 fromUsers
toOrganization
指定誰屬於Organization
以及他們的角色是什麼。我的問題與屬於 的一些可選欄位有關
Organization
,例如website
、social links
。以下是我迄今為止解決問題的想法:
- 將它們作為可選欄位添加到表中
- 優點:一張表上的簡單 CRUD,比導航連接更快,等等。
- 缺點:對我來說似乎有點臟。未來遷移會變得困難嗎?
- 創建一個
contact_information
引用 的表,從查找表中organization_id
引用contact_type_id
(網站、電子郵件、Facebook 等),並具有value
用於實際內容的通用欄位。
- 優點:感覺更乾淨,將來允許任意數量的聯繫人類型
- 缺點:可能會慢很多。更多的桌子。
我傾向於#2,因為它與我為物理地址所做的方法類似,但我不確定它是否是最好的解決方案,因為 DBA 不是我的強項。如果有我不知道的第 3 甚至第 4 選項,我也很想知道這些選項。
你的第二個選擇更靈活,但我不確定你為什麼擔心“更多的桌子”。通常這將使用單個表完成:
聯繫人類型 ------------- 身份證(PK) name 聯繫方式 --------------- ID contact_type_id(FK 到 contact_types.id) 價值 組織_聯繫人 --------------------- 身份證(PK) contact_detail_id(FK 到 contact_details) 組織 ID(FK 到組織)
像這樣填充:
聯繫人類型 ------------- 身份證 | 姓名 ----+----------- 1 | web_url 2 | facebook_url 3 | 電話_1 聯繫方式 --------------- 編號 | type_id | 價值 ----+----------+------- 1 | 1 | www.stuff.com 2 | 3 | (111) 111-1111 3 | 2 | facebook.com/?profileid=stuff 組織_聯繫人 --------------------- 編號 | contact_detail_id | 組織 ID ---+--------------------+---------------- 1 | 1 | 1 2 | 2 | 1 3 | 3 | 1
此模式只有 3 個表(不是“噸”),您可以擁有任意數量的聯繫人類型。連接並不復雜。您的
contact_details
表格將很大,因為每條聯繫資訊有 1 條記錄,但除非您有每個組織和“噸”或組織的“噸”聯繫資訊,否則這可能不會成為太大的問題。;)您還可以有一個
contact_details
儲存所有欄位的表。像這樣的東西:聯繫方式 --------------- 身份證(PK) main_email 次要電子郵件 web_url facebook_url 連結地址 我的空間網址 street_address_line_1 street_address_line_2 street_address_line_3 城市 prov_state 國家 郵政編碼 phone_num_1 phone_num_2 傳真號碼
這種結構更簡單,但更靜態。如果您不打算對您的聯繫人數據集進行太多更改,並且您認為大多數記錄將填寫最多(或超過某個門檻值)欄位,我懷疑這樣做會更好。