用于存储不同类型“人物”的SQL数据库设计

时间:2011-09-18 13:15:04

标签: sql database-design

我需要在关系数据库中使用SQL为列NameLastName等人创建一个表。

我将有三种不同的人:卖方,买方和客户。

每个人都有其他信息/属性。

我是否需要为每种不同类型的Person创建一个表,还是可以将一个表用于所有三种类型?

如果我使用单个表,如果一个类型的“Person”(如卖方)与另一个Person类型具有不同的属性会怎么样?

3 个答案:

答案 0 :(得分:2)

我会创建一个表Person,其中personId作为主键,包含所有类型的公共属性。(卖方,买方,客户)

然后我会创建一个小型参考表PersonTypes,它将声明不同类型的代码。

然后对于每种类型,我将创建一个单独的表,引用Person表和 包含所有唯一属性的PersonType表。

答案 1 :(得分:0)

卖家可以成为买家还是客户?如果可以,请将它们全部放在同一个表中,这样就不会有相同数据的单独副本。

答案 2 :(得分:0)

您可以创建一个或两个表。当然,您可以为每个用户角色创建3个表。这取决于你想要达到的目标。您的问题的常见解决方案是:创建两个表,一个用于用户,一个用于他们的角色(mysql的示例:

Create table `person_role` (
id int not null,
roleName varchar(255) not null,
PRIMARY KEY(`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Create table `person`(
id int not null.
name varchar(255) not null,
lastName varchar(255) not null,
role int not null,
PRIMARY KEY(`id`),
CONSTRAINT FOREIGN KEY(`role`) REFERENCES person_role(`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;