3 回答
TA贡献1818条经验 获得超7个赞
从基类继承的子类可以看作是数据库中基类定义的弱实体,这意味着它们依赖于它们的基类,没有它就不可能存在。我见过很多次,为每个子表存储唯一的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;
- 3 回答
- 0 关注
- 224 浏览
添加回答
举报