问题陈述 - [企业] 1---* [分支机构] 一个企业必须有一个或多个分支机构。只有一个分支可以是主分支。
我脑子里有两个设计
- [Branch table] - {id, BusinessID (FK), Name, etc , IsMainBranch}
- [Branch table] - {id, BusinessID (FK), Name, etc}, [MainBranch table] - {BranchID (PK, FK), BusinessID ( FK)}.
- [业务表] - {id, name, mainbranchid}, [Branch table] - {id, BusinessID (FK),姓名等
#1 的问题 - 为了对 IsMainBranch 施加约束,我必须使用触发器,后者可能会不同步。
#2 的问题 - 访问 EF 中的数据有点复杂。
#3 的问题 - 不要认为它是一个好的设计。
我正在使用 EF 4.1 作为 ORM,不想让事情变得复杂,我应该选择哪种设计。请建议是否有更好/替代的方法。
最佳答案
对于 SQL Server 2008+,您可以使用 filtered indexes
在您的 Branch
表中,只有一个标记 IsMainBranch
。然后创建一个唯一的过滤索引:这将只允许一行,其中 IsMainBranch= 1
每个业务。
分支表:
id (PK)
BusinessID (FK)
Name
...
IsMainBranch
然后
CREATE UNIQUE INDEX IX_MainBranch
ON Branch(BusinessID)
WHERE IsMainBranch = 1;
这给出了
- 更简单的表结构
- 没有触发器
- 数据库引擎会为您执行此操作
- 没有循环 FK(业务表中没有
MainBranchID
)
另见:
关于数据库设计 : Could I make a column in a table only allows one 'true' for some specific rows and others false for same specific rows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8698449/