2014-08-29 24 views
0

例如,我有一個聯繫人數據庫,其中包含有關聯繫人的一些基本信息。名字,姓氏,電話號碼等向數據庫提供可定製類別的首選方法是什麼?

儘管我的選項可以包含一些明顯的聯繫方式,但它需要一種方法,用戶可以添加自己的自定義字段,如'網站',' widget_1'等等。

我的第一個想法是在first_name,last_name等之後的contacts表中添加一些雜項列,並使它們成爲一個大型varchar數據類型,以便有人可以在其中存儲任何信息。這似乎馬虎,甚至仍然無法擴大接觸細節超過雜項字段的數量。

最好我希望用戶點擊'添加自定義字段',然後用數據填充它。什麼是一個聰明的方法來做到這一點,而不會混淆數據庫?

+2

另一張帶有唯一ID的表,一個用於聯繫人id的外鍵,然後是鍵/值列。 – 2014-08-29 17:43:55

回答

1

要做到這一點,最簡單的方法是讓另一個表看起來是這樣的:

CONTACT_ID INT PK, FIELD_NAME VARCHAR(64)PK, FIELD_VALUE TEXT

你可以有CONTACT_ID場成爲聯繫人表的外鍵,然後在您想要讀取自定義字段時加入此表。

1

沒有什麼好的解決方案真正適合關係數據庫範例。允許每個用戶選擇他或她的自定義字段以補充常規列從根本上破壞了relation的定義。

儘管如此,您所描述的是數據驅動型應用程序的通用要求。我做了一個演示,顯示選項,以及他們的優缺點:Extensible Data Modeling

您也可以閱讀我對Product table, many kinds of product, each product has many parameters的回答,這是一個類似的數據管理問題。

所有的解決方案在SQL中似乎或多或少都很笨拙,因爲SQL不是爲這項任務設計的。這就是爲什麼有些人被NoSQL解決方案所吸引。但是通過這樣做,他們放棄了SQL所具有的一些優點,例如表格標題,約束和正確的數據類型。

相關問題