为了账号安全,请及时绑定邮箱和手机立即绑定

如何有效地对数据库中的继承建模?

如何有效地对数据库中的继承建模?

慕容森 2019-08-03 03:03:12
如何有效地对数据库中的继承建模?在数据库中建模继承的最佳实践是什么?什么是权衡(例如可查询性)?(我对SQL Server和.NET最感兴趣,但我也想了解其他平台是如何解决这个问题的。)
查看完整描述

3 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

正如BradWilson提到的,TPT、TPH和TPC模式是你走的路。但有几个注意到:

  • 从基类继承的子类可以看作是数据库中基类定义的弱实体,这意味着它们依赖于它们的基类,没有它就不可能存在。我见过很多次,为每个子表存储唯一的ID,同时也将FK保存在父表中。一个FK就足够了,它更好的是为子表和基表之间的FK关系启用ON-DELETE级联。

  • 在TPT中,只看到基表记录,就无法找到记录所代表的子类。这有时是必要的,当您想要加载所有记录的列表时(不需要这样做)。 select 在每个孩子的桌子上)。处理这一问题的一种方法是有一列表示子类的类型(类似于TPH中的rowType字段),因此以某种方式混合了TPT和TPH。

假设我们想要设计一个包含以下形状类图的数据库:

public class Shape {

int id;

Color color;

Thickness thickness;

//other fields

}


public class Rectangle : Shape {

Point topLeft;

Point bottomRight;

}


public class Circle : Shape {

Point center;

int radius;

}

以上类的数据库设计可以如下所示:


table Shape

-----------

int id; (PK)

int color;

int thichkness;

int rowType; (0 = Rectangle, 1 = Circle, 2 = ...)


table Rectangle

----------

int ShapeID; (FK on delete cascade)

int topLeftX;

int topLeftY;

int bottomRightX;

int bottomRightY;


table Circle

----------

int ShapeID; (FK on delete cascade)  

int centerX;

int center;

int radius;


 


查看完整回答
反对 回复 2019-08-05
  • 3 回答
  • 0 关注
  • 224 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信