我必须编写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(包括脚本中每个表的语句)时,我得到以下错误:
“Ms 1776,Level 16,State 0,Line 87 引用的表'financial_transactions'中没有主键或候选键与外键'fk_financial_transactions_financial_transactions'中的引用列列表匹配。
Msg 1750,Level 16,State 0,Line 87 无法创建约束。查看以前的错误。“
所有其他语句正常执行。
我做错了什么?
*我最初在CREATE TABLE下使用了这个语句:previous_transaction_id int NOT NULL, 但是,它导致了同样的错误,在搜索时我看到了一个类似的问题,通过删除NOT NULL来修复。
答案 0 :(得分: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?
答案 1 :(得分: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);