1

抱歉,如果这听起来很菜鸟,这与继承类的数据库设计有关。

我目前有两种类型的用户在我的系统上注册,会员和员工。他们都拥有一些相同的财产(即姓名、出生日期、联系电话),同时拥有一些独特的财产供自己使用(即成员的会员编号,员工的工作人员职位)。目前,它们都在数据库中存储为 2 个不同的表,并且彼此没有关系。

我现在正在考虑创建一个名为 Person 的具有所有公共属性的实体,同时拥有一个名为 Member 的类和另一个都扩展系统中的 Person 类的 Staff。但是我在设计数据库时遇到问题。是否应该有一个名为 Person 的表具有 type 属性来表示人员的类型,或者我应该坚持现有的设计,其中 2 个表将它们分开?

4

1 回答 1

1

这取决于。

如果你不打算做多态查询,我会坚持你现在的设计。

这种设计在文献中被称为“每个具体类的表”

另一方面,如果您的大多数查询将像“给我系统中的所有人员,无论他们是成员还是员工”,您可能希望将它们全部放在一个名为 Person 的表中。

这种设计称为“按类层次结构表”

显然,这要求与继承类的属性对应的所有列在数据库中都必须为空。

如果这是不可接受的(我很难相信它会,但是......)并且为了完整起见,您最终可能会得到一个三类三表结构,这毫不奇怪称为“每类表”

这没有硬性规定,虽然我通常倾向于使用每个类层次结构中的表最有意义的系统,但对你来说可能是这样,也可能不是。

于 2012-09-26T10:01:05.087 回答