2016-10-28 27 views
0

由於原始平臺上的位置不同,我的數據庫中的大部分表由複合主鍵組成,身份只在給定的位置唯一。我有一個Period表格,以FiscalYearPeriodID分隔的本財年的開始日期和結束日期。 PeriodID被重複1-12所以該表的主鍵是兩個FiscalYearPeriodID創建FK約束時出錯約束:引用表'Period'中沒有與引用列相匹配的主鍵或候選鍵

FiscalYear INT NOT NULL, 
PeriodID TINYINT NOT NULL, 
PeriodStart DATE NOT NULL, 
PeriodEnd DATE NOT NULL, 
PeriodWeeks TINYINT NOT NULL, 
QuarterID TINYINT NOT NULL, 
DateManipulate DATE NOT NULL, 
CONSTRAINT [PK_Period] PRIMARY KEY (PeriodID, FiscalYear) 

我也有使用相同FiscalYearPeriodID但具有唯一的每個位置數據的Clinic.Dates表。我有這些分開,所以我沒有40個相同的日期範圍重複的FiscalYearPeriodID的實例。

ClinicID INT NOT NULL CONSTRAINT [FK_ClinicDates] FOREIGN KEY REFERENCES Clinic.Master(ClinicID), 
FiscalYear INT NOT NULL, 
PeriodID TINYINT NOT NULL, 
PeriodDays INT NOT NULL, 
CONSTRAINT [PK_Dates] PRIMARY KEY (ClinicID, PeriodID, FiscalYear) 

我遇到的問題是創建這些表之間的外鍵約束,因爲列不是唯一的。

ALTER TABLE Clinic.Dates ADD 
    CONSTRAINT FK_PeriodDates FOREIGN KEY(FiscalYear, PeriodID) REFERENCES Clinic.Period(FiscalYear, PeriodID) 
GO 

我得到的錯誤是:

There are no primary or candidate keys in the referenced table 'Clinic.Period' that match the referencing column list in the foreign key 'FK_PeriodDates'.

我的問題:有沒有解決這個另一種方式?主鍵存在於Clinic.Period表中,但在嘗試製作此FK約束時無法識別。

更新:這裏有兩個數據示例爲更好的角度這兩個表。

週期表: enter image description here

Clinic.Dates表: enter image description here

回答

1

你有參考倒退。它應該從Clinic.PeriodsClinic.Dates

ALTER TABLE Clinic.Periods ADD 
    CONSTRAINT FK_PeriodDates FOREIGN KEY(FiscalYear, PeriodID) REFERENCES Clinic.Dates(FiscalYear, PeriodID) 
GO 
+0

我不這麼認爲,在'Clinic.Dates'表都將有FiscalYear'的'多個實例和'PeriodID'所以它couldn」不能用於限制條件。無論我給了它一個鏡頭,並收到相同的錯誤:'在引用表'Clinic.Dates'中沒有與外鍵'FK_PeriodDates'中的引用列表匹配的主鍵或候選鍵。 –

相關問題