我很难弄清楚在创建数据库结构时是否有办法在SQL中实施隐式关系。在抽象的层面,我想类似下面的模式:在SQL中强制隐式关系
一个人可以属于一个或多个Workfield的,一个workfield可以有一个或多个子workfield的其中一个人也可以属于。如果一个人属于一个或多个子工作田,那么他也必须属于他们的父母工地。
有没有办法在SQL中强制执行这种关系,还是我需要在应用程序层中执行此操作?
我很难弄清楚在创建数据库结构时是否有办法在SQL中实施隐式关系。在抽象的层面,我想类似下面的模式:在SQL中强制隐式关系
一个人可以属于一个或多个Workfield的,一个workfield可以有一个或多个子workfield的其中一个人也可以属于。如果一个人属于一个或多个子工作田,那么他也必须属于他们的父母工地。
有没有办法在SQL中强制执行这种关系,还是我需要在应用程序层中执行此操作?
您可以在数据库中执行此操作。一种方法是有四个表格:Person
,Workfield
,Subworkfield
和PersonWorks
。
前三个是不言自明的。 Subworkfield
表将具有列WorkfieldId
,其将具有到Workfield
的外键关系。列Subworkfield.SubworkfieldId
将是主键,并且列对SubworkfieldId, WorkfieldId
将被宣布为unique
。后面的声明是多余的,但它对强制执行其中一个条件很有帮助。
的Personworks
表将有三个(相关)列:
每个人都会有建议的外国参考文献。当参考仅为Workfield
时,则SubworkfieldId
将为NULL
。
此外,还会有更多的多了一个外键引用:
foreign key (WorkfieldId, SubworkfieldId) referenes SubworkfieldId(WorkfieldId, SubWorkfieldId)
而且,对于完整性,您可以添加:
check (WorkfieldId is not null)
这种结构充分利用了NULL
值是如何处理为外键引用。如果密钥或复合密钥的任何部分是NULL
,则不检查外键引用。因此,您可以参考Subworkfield
表,并且仅在数据填充时使用。
谢谢,明确的食物! – 2014-10-04 16:29:46