[英]Constrain a table such that each account can have one of another table
我有一個包含以下列的表:
Id
(主鍵):ID。 OwnerId
(外鍵):所有者的ID,位於另一個表中。 TypeId
(外鍵):此記錄表示的事物的類型。 有有限數量的類型,這些類型在另一個表中表示。 這鏈接到該表。 TypeCreatorId
(ForeignKey):TypeId表示的類型的所有者。 SourceId
(外鍵):這對這個問題並不重要。 我需要限制此表,以便對於每個ID,每個TypeCreatorId只能有一個。 我希望這是有道理的!
對於SQL Server,您有兩個選擇:
創建一個UNIQUE CONSTRAINT
ALTER TABLE dbo.YourTable ADD CONSTRAINT UNIQ_Id_TypeCreator UNIQUE(Id, TypeCreatorId)
創建一個UNIQUE INDEX
:
CREATE UNIQUE INDEX UIX_YourTable_ID_TypeCreator ON dbo.YourTable(Id, TypeCreatorId)
基本上,這兩種方法都可以實現同一件事-您不能有兩行具有相同的(Id, TypeCreatorId)
值。
只需在OwnerId
和TypeCreatorId
上創建唯一索引。
使用MySQL的示例(抱歉,我不使用SQL Server):
alter table yourTable
add unique index idx_newIndex(OwnerId, TypeCreatorId);
例。 我將把這個新的唯一索引放在這里:
OwnerId | TypeCreatorId
--------+--------------
1 | 1
1 | 2 -- This is Ok
2 | 1 -- Ok too
2 | 2 -- Ok again
1 | 2 -- THIS WON'T BE ALLOWED because it would be a duplicate
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.