2

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

我现在正在制作“人”表,并决定需要哪些

一个有一个名称列,
我想添加名列,其中包含各种约定中的名称。

例如,一个名为“Micheal Jackson”的人可能有“ M. Jackson ”、 “Jackson, M”“MJ”之类的别名

反正每个人可以有不同数量的别名,那么什么数据类型才是合理的呢?

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

或从PHP中的名称动态创建别名?而不是把它放在数据库中?

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

4

3 回答 3

4

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

于 2012-04-08T01:16:07.890 回答
2

创建一个新表并调用它aliases。此表应与您的表具有多对一关系people

表关系

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

然后来检索数据使用Joins

参考:

基数(数据建模)

外键

加入 (SQL)

最后也是最重要的标准化

于 2012-04-08T01:28:46.870 回答
1

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

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

迈克尔杰克逊#M.Jackson

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

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

$each = explode('#' , $fullname );
$each[0];//Micheal Jackson
$each[1];//M.Jackson
于 2012-04-08T01:33:01.360 回答