2

この ERD でテーブル、属性、および主キーと外部キーを作成するには、SQL を記述する必要がありました: http://imgur.com/VYZbwr6

ERD のテーブル「Financial_Transactions」には、「previous_transaction_id」と呼ばれる属性と「transaction_id」と呼ばれる別の属性があります。このテーブルの「previous_transaction_id」は、属性であることに加えて、このテーブルの外部キーです。テーブル内の最後の「transaction_id」を参照します。

「financial_transactions」テーブルの SQL は次のとおりです。

CREATE TABLE financial_transactions(
transaction_id int IDENTITY(1,1) NOT NULL,
account_id int NOT NULL,
item_rental_id int NOT NULL,
previous_transaction_id int,
transaction_type_code int NOT NULL,
transaction_date date NOT NULL,
transaction_amount money NOT NULL,
transaction_comment varchar(512) NOT NULL);

ALTER TABLE financial_transactions ADD CONSTRAINT pk_financial_transactions PRIMARY KEY (transaction_id);

ALTER TABLE financial_transactions ADD  CONSTRAINT fk_financial_transactions_accounts FOREIGN KEY(account_id)
REFERENCES accounts (account_id);

ALTER TABLE financial_transactions ADD  CONSTRAINT fk_financial_transactions_customer_rentals FOREIGN KEY(item_rental_id)
REFERENCES customer_rentals (item_rental_id);

ALTER TABLE financial_transactions ADD  CONSTRAINT fk_financial_transactions_financial_transactions FOREIGN KEY(previous_transaction_id)
REFERENCES financial_transactions (previous_transaction_id);

ALTER TABLE financial_transactions ADD  CONSTRAINT fk_financial_transactions_transaction_types FOREIGN KEY(transaction_type_code)
REFERENCES transaction_types (transaction_type_code);

SQL (スクリプト内の各テーブルのステートメントを含む) を実行すると、次のエラーが発生します。

"メッセージ 1776、レベル 16、状態 0、行 87 外部キー 'fk_financial_transactions_financial_transactions' の参照列リストと一致する参照テーブル 'financial_transactions' に主キーまたは候補キーがありません。

メッセージ 1750、レベル 16、状態 0、行 87 制約を作成できませんでした。以前のエラーを参照してください。」

他のすべてのステートメントは正常に実行されます。

私は何を間違っていますか?

*元々このステートメントを CREATE TABLE: previous_transaction_id int NOT NULL で使用しましたが、同じエラーが発生し、検索時に NOT NULL を削除することで修正された同様の質問が見つかりました。

4

2 に答える 2

1

ここ

ALTER TABLE financial_transactions ADD  CONSTRAINT 
fk_financial_transactions_financial_transactions 
FOREIGN KEY(previous_transaction_id)
REFERENCES financial_transactions (previous_transaction_id);

自分自身を参照する列があります。それはあなたの意図でしたか、それとも transaction_id を参照したかったですか?

于 2013-04-03T23:31:52.100 に答える
0

同じテーブルに外部キーを定義しても問題はありませんが、それ自体を参照する列があります。

置き換えてみてください:

ALTER TABLE financial_transactions ADD  CONSTRAINT fk_financial_transactions_financial_transactions FOREIGN KEY(previous_transaction_id)
REFERENCES financial_transactions (previous_transaction_id);

と:

ALTER TABLE financial_transactions ADD  CONSTRAINT fk_financial_transactions_financial_transactions FOREIGN KEY(previous_transaction_id)
REFERENCES financial_transactions (transaction_id);
于 2013-04-03T23:41:57.907 に答える