在一个SQL Comlumn中保存多个元素的好方法?

问题描述:

我正在建模一个网站的MySQL数据库。在一个SQL Comlumn中保存多个元素的好方法?

我现在正在“人”表,并决定什么需要列。

一个列,
我要添加别名列,其中包含各项公约的名称。

例如,一个人的名字是“MJ的可以具有别名像 'M.杰克逊', '杰克逊,M',或'M.J.'

无论如何,每个人可以有不同数量的别名,那么数据类型可能是合理的?

别名字段作为的Varchar,并把每一个别名它,并把他们分成PHP?

或使别名动态名称在PHP中?而不是把它放在数据库中?

我在等待好的建议,谢谢!

制作一张新表并将其命名为aliases。此表应该与您的表people有多对一的关系。

Tables relation

aliases应该有一个外键到父表persons(即有一个柱aliases.personId它引用people.personId

然后检索数据使用Joins

引用:

Cardinality (data modeling)

Foreign key

Join (SQL)

,最后也是最重要的Normalization

这样做的规范化方式是使用带有人员ID字段和别名字段的单独别名表,并建立多对一的关系。另一种方法是像你说的那样,使用所有别名的VARCHAR字段并将它们分成PHP。如果你永远不需要搜索别名,这应该工作,但规范化的版本更清洁。

+0

+ 1:当存在性能问题时,非规范化是性能考虑因素*,而不是之前。 – 2012-04-08 01:17:51

+0

您通常如何使用这些值也应该纳入您的决定。 – Leigh 2012-04-08 20:19:18

它可能是最好使用别名另一个表,但有另一种方式,如果你想用一张表

单独的名称,并用#别名,并把他们在一列

迈克尔杰克逊#M.Jackson

在PHP代码,你可以用爆炸来获得名和别名

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

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