Schema

創建包含許多可選欄位的表

  • August 6, 2014

我是一名開發人員(學生),正在尋找一些關於在創建表以對具有多個可選欄位的實體進行建模時應該遵循的最佳方法的建議。

需要對Organization具有幾個關鍵欄位(例如id和)的實體進行建模name。還有一個連接表 from UserstoOrganization指定誰屬於Organization以及他們的角色是什麼。

我的問題與屬於 的一些可選欄位有關Organization,例如websiteemailsocial links。以下是我迄今為止解決問題的想法:

  1. 將它們作為可選欄位添加到表中
  • 優點:一張表上的簡單 CRUD,比導航連接更快,等等。
  • 缺點:對我來說似乎有點臟。未來遷移會變得困難嗎?
  1. 創建一個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
傳真號碼

這種結構更簡單,但更靜態。如果您不打算對您的聯繫人數據集進行太多更改,並且您認為大多數記錄將填寫最多(或超過某個門檻值)欄位,我懷疑這樣做會更好。

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