首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >允许表中有重复值但不允许相同外键引用的查询

允许表中有重复值但不允许相同外键引用的查询
EN

Stack Overflow用户
提问于 2011-03-02 17:21:01
回答 2查看 545关注 0票数 0

我正在使用带有asp.net的SQL Server2005。我希望在服务器端进行验证,以限制重复条目,这里我使用了两个表companies和Branches。在分支表中,我维护了一个外键CompanyId。在分支中,BranchName可以是重复的,但不能用于特定的CompanyId。

代码语言:javascript
运行
复制
Companies Table:
        Columns: CompanyId (Primary Key), CompanyName

Branches Table :
        Columns: BranchId(Primary Key), BranchName, CompanyId (Foreign Key).

公司Id可以重复多次,一对多关系。我使用哪个查询来允许重复,但不允许相同的CompanyId?

EN

回答 2

Stack Overflow用户

发布于 2011-03-02 17:27:45

您需要一个对CompanyID和BranchName列强制唯一性的约束。这可以通过表的主键(正如Tim建议的那样),也可以通过唯一约束:

代码语言:javascript
运行
复制
ALTER TABLE Branches ADD
    CONSTRAINT UQ_BranchNamesWithinCompanies UNIQUE (BranchName,CompanyID);

您可以根据基于这两列在表中执行搜索的频率来决定在约束中放置列的顺序。也就是说,您实际上是在这些列上创建一个索引,所以您也可以使用它来提高一些查询性能。

上面的排序是基于一种猜测,即您可能会搜索分支机构名称,而不涉及特定的公司。如果您总是在公司内部搜索,并且正在执行前缀搜索(例如CompanyID=21 and BranchName like 'Lon%'),那么您可能希望颠倒列的顺序。

票数 4
EN

Stack Overflow用户

发布于 2011-03-02 17:24:05

您可以从BranchName+CompanyId创建一个composite primary key

http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5165483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档