猿问

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

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

在数据库中建模继承的最佳实践是什么?

什么是权衡(例如可查询性)?

(我对SQL Server和.NET最感兴趣,但我也想了解其他平台是如何解决这个问题的。)


慕容森
浏览 225回答 3
3回答

qq_笑_17

正如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; 
随时随地看视频慕课网APP
我要回答