C# - 子实体的表结构

时间:2012-09-26 09:51:44

标签: sql database-design

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

我目前有两种类型的用户可以在我的系统,会员和员工上注册。他们共享一些相同的财产(即姓名,dob,联系号码),同时拥有一些独特的财产供他们自己使用(即会员资格为会员,工作人员职位)。目前,它们都作为2个不同的表存储在数据库中,彼此之间没有任何关系。

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

1 个答案:

答案 0 :(得分:1)

取决于。

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

这种设计在文献“table per concrete class”

中调用

另一方面,如果您的大部分查询都像“给我系统中的所有人,无论他们是成员还是员工”,您可能想要将它们放入所有这些一起组成一个名为Person的表。

这种设计被称为“每个类层次结构的表”

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

如果这是不可接受的(我发现很难相信它会,但是......)并且为了完整性,你可能会得到一个三级,三表结构,这不足为奇地被称为 “每班一桌”

对此没有严格的规则,虽然我通常倾向于使用每个类层次结构表最有意义的系统,但对您来说可能是也可能不是。