问题陈述 - [业务] 1 --- * [分支机构]企业必须拥有一个或多个分支机构。只有一个分支可以成为主分支。
我脑子里有两个设计
问题#1 - 要对IsMainBranch进行约束我必须使用触发器,后者可能会不同步。
#2的问题 - 在EF中访问数据有点复杂。
#3的问题 - 不要认为它是一个好的设计。
我使用EF 4.1作为ORM并且不想让事情变得复杂,我应该选择哪种设计。请建议是否有更好的/替代方式。
答案 0 :(得分:6)
使用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;
这给出了
MainBranchID
)另见:
答案 1 :(得分:0)
每个“卫星”分支都有一个主分支,对吗?那么为什么不拥有一个领域“主要分支”。如果branch id == main branch,那么 是一个主分支。否则,将引用到主分支。
你应该不有一个“isMainbranch”列。
“分支类型”列可能没问题:类型可能包括“main”,“satellite”,“ATM kiosk”等。但布尔值为“isMainBranch”?没有。
... IMHO
答案 2 :(得分:0)
我会选择3号,在商业表格中创建一个mainBranchId。
1)这将确保在任何给定时间每个企业最多有一个主要分支。 (这可能发生在其他2个设计中)
2)你不需要创建一个额外的表,它是分支表的复制(这是你在第二个设计中要做的)