【发布时间】:2010-09-24 20:37:58
【问题描述】:
假设我有一个代表超级班级students的表格。然后我有 N 个表来表示该对象的子类(athletes、musicians 等)。如何表达一个约束,使得学生必须在一个(不多也不少)子类中建模?
关于 cmets 的说明:
- 这是手动维护的,而不是通过 ORM 包。
- 与此相关的项目位于 SQL Server 之上(但很高兴看到通用解决方案)
- 这可能不是最好的例子。关于子类化,我们可以考虑几种情况,而我恰好发明了这个学生/运动员的例子。
A) 在真正的面向对象的方式中,超类可以单独存在而无需在任何子类中建模。
B) 在现实生活中,任何对象或学生都可以有多个角色。
C) 我试图说明的特定场景是要求每个对象都在一个子类中实现。将超类视为抽象实现,或者只是从其他不同的对象类/实例中分解出来的共性。
感谢大家的意见,尤其是比尔。
【问题讨论】:
-
只是为了澄清一下:您是手动管理这个还是使用像休眠这样的 ORM 解决方案?
-
您使用的是什么数据库?如果您使用的是 PostgreSQL,它可以使用表继承。
-
我很好奇,为什么学生不能既是运动员又是护士?
-
@Elijah - 真的吗?必须检查一下 - 谢谢! @Charles - 好点 - 这看起来确实是个坏例子
-
提防特定于 DB 的功能(例如从 Postgres 继承的表)。最好保留每个 RDBMS 中的基本关系特性。可移植性和代码可读性是加分项。
标签: sql sql-server database-design oop