gpt4 book ai didi

数据库设计 : Could I make a column in a table only allows one 'true' for some specific rows and others false for same specific rows

转载 作者:搜寻专家 更新时间:2023-10-30 21:47:46 25 4
gpt4 key购买 nike

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

我脑子里有两个设计

  1. [Branch table] - {id, BusinessID (FK), Name, etc , IsMainBranch}
  2. [Branch table] - {id, BusinessID (FK), Name, etc}, [MainBranch table] - {BranchID (PK, FK), BusinessID ( FK)}.
  3. [业务表] - {id, name, ma​​inbranchid}, [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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com