数据库设计:我是否可以在表中创建一个列,只允许对某些特定行使用"true"而对于相同的特定行使用"false"

Mah*_*esh 1 database database-design sql-server-2008 entity-framework-4.1

问题陈述 - [业务] 1 ---*[分支]企业必须有一个或多个分支.只有一个分支可以是主分支.

我脑子里有两个设计

  1. [ 分支表 ] - {id,BusinessID(FK),名称等,IsMainBranch }
  2. [ 分支表 ] - {id,BusinessID(FK),名称等},[ MainBranch表 ] - {BranchID(PK,FK),BusinessID(FK)}.
  3. [ 业务表 ] - {id,name,mainbranchid },[ 分支表 ] - {id,BusinessID(FK),名称等}

问题#1 - 要对IsMainBranch进行约束我必须使用触发器,后者可能会不同步.

问题#2 - 在EF中访问数据有点复杂.

问题#3 - 不要认为它是一个好的设计.

我使用EF 4.1作为ORM并且不想让事情变得复杂,我应该选择哪种设计.请建议是否有更好的/替代方式.

gbn*_*gbn 6

使用SQL Server 2008+,您可以使用筛选索引

在你的Branch桌子上,只有一面旗帜IsMainBranch.然后创建一个唯一的筛选索引:这将只允许IsMainBranch= 1每个Business的一行.

分支表:

id (PK)
BusinessID (FK)
Name
...
IsMainBranch 
Run Code Online (Sandbox Code Playgroud)

然后

CREATE UNIQUE INDEX IX_MainBranch 
        ON Branch(BusinessID) 
        WHERE IsMainBranch = 1;
Run Code Online (Sandbox Code Playgroud)

这给了

  • 更简单的表结构
  • 没有触发器
  • 数据库引擎为您强制执行此操作
  • 没有循环FK(MainBranchID业务表中没有)

另见: