2012-04-08 22 views
2

我正在建模一個網站的MySQL數據庫。在一個SQL Comlumn中保存多個元素的好方法?

我現在正在「人」表,並決定什麼需要列。

一個列,
我要添加別名列,其中包含各項公約的名稱。

例如,一個人的名字是「MJ的可以具有別名像 'M.傑克遜', '傑克遜,M',或'M.J.'

無論如何,每個人可以有不同數量的別名,那麼數據類型可能是合理的?

別名字段作爲的Varchar,並把每一個別名它,並把他們分成PHP?

或使別名動態名稱在PHP中?而不是把它放在數據庫中?

我在等待好的建議,謝謝!

回答

2

製作一張新表並將其命名爲aliases。此表應該與您的表people有多對一的關係。

Tables relation

aliases應該有一個外鍵到父表persons(即有一個柱aliases.personId它引用people.personId

然後檢索數據使用Joins

引用:

Cardinality (data modeling)

Foreign key

Join (SQL)

,最後也是最重要的Normalization

4

這樣做的規範化方式是使用帶有人員ID字段和別名字段的單獨別名表,並建立多對一的關係。另一種方法是像你說的那樣,使用所有別名的VARCHAR字段並將它們分成PHP。如果你永遠不需要搜索別名,這應該工作,但規範化的版本更清潔。

+0

+ 1:當存在性能問題時,非規範化是性能考慮因素*,而不是之前。 – 2012-04-08 01:17:51

+0

您通常如何使用這些值也應該納入您的決定。 – Leigh 2012-04-08 20:19:18

1

它可能是最好使用別名另一個表,但有另一種方式,如果你想用一張表

單獨的名稱,並用#別名,並把他們在一列

邁克爾傑克遜#M.Jackson

在PHP代碼,你可以用爆炸來獲得名和別名

$fullname = "Micheal Jackson#M.Jackson"; 

$each = explode('#' , $fullname); 
$each[0];//Micheal Jackson 
$each[1];//M.Jackson 
相關問題