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

时间:2012-04-08 01:11:16

标签: php mysql database

我正在为网站建模MySQL数据库。

我现在正在制作'people'表,并决定需要

有一个名称列,我希望添加别名列,其中包含各种约定中的名称

例如,名称为'Micheal Jackson'的人可能具有别名,例如' M.杰克逊”, 'Jackson,M''M.J。'

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

别名字段设为 Varchar ,并将每个别名放入其中,并将它们拆分为PHP?

在PHP中从 name 创建别名动态?而不是把它放在DB?

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

3 个答案:

答案 0 :(得分:4)

执行此操作的规范化方法是使用单独的别名表,其中包含人员ID字段和别名字段,并建立多对一关系。另一种方法是,如你所说,VARCHAR字段包含所有别名,并在PHP中拆分它们。如果您永远不需要搜索别名,这应该可行,但规范化版本更清晰。

答案 1 :(得分:2)

制作一张新表并将其称为aliases。此表格与您的表格people应具有多对一关系。

Tables relation

aliases应该有一个父表persons的外键(即有一个引用aliases.personId的列people.personId

然后使用Joins来检索数据。

的引用:

Cardinality (data modeling)

Foreign key

Join (SQL)

最后也是最重要的Normalization

答案 2 :(得分:1)

最好使用另一个表作为别名,但如果你想使用一个表,还有另一种方法

用#分隔名称和别名并将它们放在一列

迈克尔杰克逊#M.Jackson

在php代码中你可以使用explode来获取名称和别名

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

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