2013-03-28 49 views
0

在每种类型架构的表中,假设我有一个具有两个子类型student和teacher的Person类型。学生不能当老师,老师不能当学生。每种类型的专有子类型的数据库表

下面是我知道如何到目前为止设置这些的最佳途径:

Geometry 
    ID int, PK 
    Name string 

Point 
    ID int, PK, FK 
    X float 
    Y float 

Line 
    ID int, PK, FK 
    StartPoint int, FK 
    EndPoint int, FK 

注意,对于子类型的主键也是一个外键几何。我怎样才能确保没有既是点又是线的几何?是否存在某种相互排斥的约束?

如果唯一的解决方案是使用特定于供应商的触发器之类的东西,我最好是这样做,还是在稍后或客户端的其他地方执行此操作?

谢谢!

+0

所以,你不考虑的想法,一个人不能同时是老师和学生是一个数据完整性的问题,而是一个逻辑问题?拥有这个枚举不是多余的吗?这些不是修辞问题,我真的不知道什么是最好的 – Eric

+0

也许我太抽象了,如果这是高中或明显不是什么,但任何高等教育机构,这当然是可能的。如果它们完全分离,为什么它们从'Person'继承,而不是仅仅创建2个表格,'Teacher'和'Student'? –

+0

我实际上是在一个非常不同的数据库上工作。在我的数据库中,子类型绝大多数是独占的。在这种情况下,我将编辑该帖子以阐明 – Eric

回答

0

在StackOverflow和数据库管理员这里有几个类似的问题可以作为一个很好的参考点。请参阅此相关的问题:

How do I model one entity that references one of several other entities in SQL?

+1

作为评论比答案更合适。 –

+0

它肯定会让我朝着正确的方向发展,我非常感谢:)我不介意将我的结果编译成答案,并在发现后发布。 – Eric

+0

http://stackoverflow.com/questions/4896831/how-to-implement-referential-integrity-in-subtypes/4898314#4898314 这家伙似乎知道他的东西 – Eric