我在asp.net上使用SQL Server2005。我希望在服务器端验证以限制重复条目,在这里我使用两个表公司和分支。在分支表中,我维护了CompanyId的外键。在分支中,BranchName可以是重复的,但不适用于特定的CompanyId。
Companies Table:
Columns: CompanyId (Primary Key), CompanyName
Branches Table :
Columns: BranchId(Primary Key), BranchName, CompanyId (Foreign Key).
公司ID可以重复多次,一对多关系。 我使用哪个查询允许重复但不适用于同一CompanyId?
答案 0 :(得分:4)
您需要一个对CompanyID和BranchName列强制实施唯一性的约束。这可以通过表的主键(如Tim推荐的)或UNIQUE约束:
ALTER TABLE Branches ADD
CONSTRAINT UQ_BranchNamesWithinCompanies UNIQUE (BranchName,CompanyID);
您可以根据基于两列在表中执行搜索的频率来决定将列置于约束内的顺序。即您实际上是在这些列上创建索引,因此您也可以使用它来提高查询性能。
上述排序基于猜测,您可能会在不参考特定公司的情况下搜索分支机构名称。如果您一直在公司内搜索,并且正在执行前缀搜索(例如CompanyID=21 and BranchName like 'Lon%'
),那么您需要反转列的顺序。
答案 1 :(得分:2)
您可以从BranchName + CompanyId创建composite primary key。
http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx