2

我必须编写 SQL 来在此 ERD 中创建表、属性以及主键和外键: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 行在引用表 'financial_transactions' 中没有与外键 'fk_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 回答