在一个SQL Comlumn中保存多个元素的好方法?
问题描述:
我正在建模一个网站的MySQL数据库。在一个SQL Comlumn中保存多个元素的好方法?
我现在正在“人”表,并决定什么需要列。
一个人有名列,
我要添加别名列,其中包含各项公约的名称。
例如,一个人的名字是“MJ的可以具有别名像 'M.杰克逊', '杰克逊,M',或'M.J.'。
无论如何,每个人可以有不同数量的别名,那么数据类型可能是合理的?
让别名字段作为的Varchar,并把每一个别名它,并把他们分成PHP?
或使别名动态从名称在PHP中?而不是把它放在数据库中?
我在等待好的建议,谢谢!
答
制作一张新表并将其命名为aliases
。此表应该与您的表people
有多对一的关系。
表aliases
应该有一个外键到父表persons
(即有一个柱aliases.personId
它引用people.personId
)
然后检索数据使用Joins
。
引用:
,最后也是最重要的Normalization
答
这样做的规范化方式是使用带有人员ID字段和别名字段的单独别名表,并建立多对一的关系。另一种方法是像你说的那样,使用所有别名的VARCHAR
字段并将它们分成PHP。如果你永远不需要搜索别名,这应该工作,但规范化的版本更清洁。
答
它可能是最好使用别名另一个表,但有另一种方式,如果你想用一张表
单独的名称,并用#别名,并把他们在一列
迈克尔杰克逊#M.Jackson
在PHP代码,你可以用爆炸来获得名和别名
$fullname = "Micheal Jackson#M.Jackson";
$each = explode('#' , $fullname);
$each[0];//Micheal Jackson
$each[1];//M.Jackson
+ 1:当存在性能问题时,非规范化是性能考虑因素*,而不是之前。 – 2012-04-08 01:17:51
您通常如何使用这些值也应该纳入您的决定。 – Leigh 2012-04-08 20:19:18