![](/img/trans.png)
[英]How to alter a column which is a primary key in the table and a foreign key in another table in MySQL?
[英]how to validate values of a column with column of another table which is not a primary key
我有一個表DRIVER
其中的列具有以下規范BranchPostedAt int not null
在另一個表中。 CompanyBranch
,我有以下列BranchId int not null
在第二個表中。 CompanyBranch
,主鍵設置為兩列,如下所示
CompanyId int not null
BranchId int not null
有沒有什么辦法讓我可以設置一個外國參考鍵dbo.Driver.BranchPostedId
引用dbo.CompanyBranch.BranchId
創造的時間dbo.Driver
?
有什么幫助嗎?
不,不可能。 若要創建外鍵,您在另一個表中“引用”的鍵必須是UNIQUE或PRIMARY KEY約束。
您可以考慮以下幾種選擇:
一種替代方法是創建一個觸發器 ,但這有點混亂。 我更喜歡以前的張貼者答案,以便在CompanyBranch [CompanyBranchId]上創建一個新的相同主鍵,並將其作為外鍵引用。
就像是:
CREATE TRIGGER trDriver
ON DRIVER
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF NOT EXISTS(Select *
from CompanyBranch cb
Inner join inserted i on i.BranchPostedAt = cb.BranchId )
BEGIN
RAISERROR ('The BranchPostedAt is not in the CompanyBranch table.', 16, 1);
ROLLBACK TRANSACTION;
RETURN
END
END
GO
根據您的問題和評論,這就是您所擁有的
TABLE dbo.CityMaster
CityId INT NOT NULL PRIMARY KEY,
TABLE dbo.CompanyBranch
CompanyID INT NOT NULL,
BranchID INT NOT NULL REFERENCES dbo.CityMaster(CityId),
CONSTRAINT PK... PRIMARY KEY (CompanyID,BranchID)
TABLE dbo.DRIVER
BranchPostedAt INT NOT NULL,
現在,由於BranchID
引用CityMaster.City
列, BranchID
不是unique
在列dbo.CompanyBranch
,您不能使用BranchID
作為你的外鍵引用DRIVER.BranchPostedAt
。
選項1
您應該使用dbo.CityMaster
,其中包含將存儲在DRIVER.BranchPostedAt
中的值的主列表。
選項2
如果要dbo.CompanyBranch
,則必須創建一個新的唯一列(您甚至可以使用identity
列使其透明)可能是CompanyBranchID
(除了現有的組合鍵之外),並將其用作外鍵引用。 您現有的組合鍵無法原樣使用。
僅當您擁有多個公司時,擁有CompanyBranch表才有意義,而且公司之間可能會共享分支機構,否則就不需要該表。 您剛剛有了Company和Branch Table,並且Branch Table中的BranchID是唯一的,並且Branch Table Too中也有一個外鍵CompanyID。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.