我正在使用带有asp.net的SQL Server2005。我希望在服务器端进行验证,以限制重复条目,这里我使用了两个表companies和Branches。在分支表中,我维护了一个外键CompanyId。在分支中,BranchName可以是重复的,但不能用于特定的CompanyId。
Companies Table:
Columns: CompanyId (Primary Key), CompanyName
Branches Table :
Columns: BranchId(Primary Key), BranchName, CompanyId (Foreign Key).公司Id可以重复多次,一对多关系。我使用哪个查询来允许重复,但不允许相同的CompanyId?
发布于 2011-03-02 17:27:45
您需要一个对CompanyID和BranchName列强制唯一性的约束。这可以通过表的主键(正如Tim建议的那样),也可以通过唯一约束:
ALTER TABLE Branches ADD
CONSTRAINT UQ_BranchNamesWithinCompanies UNIQUE (BranchName,CompanyID);您可以根据基于这两列在表中执行搜索的频率来决定在约束中放置列的顺序。也就是说,您实际上是在这些列上创建一个索引,所以您也可以使用它来提高一些查询性能。
上面的排序是基于一种猜测,即您可能会搜索分支机构名称,而不涉及特定的公司。如果您总是在公司内部搜索,并且正在执行前缀搜索(例如CompanyID=21 and BranchName like 'Lon%'),那么您可能希望颠倒列的顺序。
发布于 2011-03-02 17:24:05
您可以从BranchName+CompanyId创建一个composite primary key。
http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx
https://stackoverflow.com/questions/5165483
复制相似问题