この質問は this one とほぼ同じですが、SQL Server 2005の場合:
データベースに2つのテーブルがあります。
--'#' denotes the primary key
[Libraries]
#ID #Application Name
1 MyApp Title 1
2 MyApp Title 2
[Content]
#ID Application LibraryID Content
10 MyApp 1 xxx
11 MyApp 1 yyy
(データベースは明らかにはるかに複雑であり、この二重キーを持つことは理にかなっています)
各ライブラリは、一意のIDとアプリケーション名で識別されます。各コンテンツが既存のライブラリを適切に参照していることを確認しようとしています。
(ウィザードを使用して)制約を作成するとき
Primary key table Foreign key table
[Libraries] [Content]
ID ---> LibraryID
Application ---> Application
次のエラーがあります。
テーブル 'Libraries'の列は、既存の主キーまたはUNIQUE制約と一致しません
何が起こっているのかご存知ですか?そして、それがSQL Serverを使用してまったく可能かどうか? ([ライブラリ]テーブルをまったく変更できません)
ご協力ありがとうございました!
もちろん、複合(複数の列)主キーとの外部キー関係を作成することは可能です。その関係を作成するために使用しているステートメントは表示されませんでした。次のようになります。
ALTER TABLE dbo.Content
ADD CONSTRAINT FK_Content_Libraries
FOREIGN KEY(LibraryID, Application)
REFERENCES dbo.Libraries(ID, Application)
それはあなたが使っているものですか?? (ID, Application)
がdbo.Libraries
の主キーである場合、このステートメントは確実に機能します。
Luk:確認するだけです-データベースでこのステートメントを実行し、出力を報告してください。
SELECT
tc.TABLE_NAME,
tc.CONSTRAINT_NAME,
ccu.COLUMN_NAME
FROM
INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
INNER JOIN
INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu
ON ccu.TABLE_NAME = tc.TABLE_NAME AND ccu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME
WHERE
tc.TABLE_NAME IN ('Libraries', 'Content')
フィールドは同じ順序でなければならないことに注意してください。参照している主キーが(アプリケーション、ID)として指定されている場合、外部キーは2つの異なるキーとして認識されるため、(アプリケーション、ID)とNOT(ID、アプリケーション)を参照する必要があります。
キーは「列の順序は同じでなければなりません」です
例:
create Table A (
A_ID char(3) primary key,
A_name char(10) primary key,
A_desc desc char(50)
)
create Table B (
B_ID char(3) primary key,
B_A_ID char(3),
B_A_Name char(10),
constraint [Fk_B_01] foreign key (B_A_ID,B_A_Name) references A(A_ID,A_Name)
)
テーブルAの列の順序は-> A_ID
その後A_Name
;外部キーの定義も同じ順序に従う必要があります。
Content
テーブルには、Application
にマップできない複数の重複したLibraries
値がある可能性があります。 Application
主キーインデックスからLibraries
列を削除し、代わりに一意のキーインデックスとして追加することは可能ですか?
私は同じ問題を抱えていて、解決策があると思います。
テーブルApplication
のフィールドLibrary
に、別のテーブルのフィールドを参照する外部キー(Application
という名前が付けられます)がある場合、フィールドApplication
テーブルLibrary
にも、テーブルApplication
への外部キーが必要です。
その後、作成した外部キーを実行できます。
下手な英語をすみません。間違っていたらごめんなさい。