create table Product(
Prodid number(5) primary key
, Prodesc varchar(20)
, Price number(6,2)
, Stock number (6)
);
这个外键是指产品表的产品:
create table Purchase(
Purid number(9) primary key
, Proid number(5)
, CONSTRAINT fk_Product FOREIGN KEY(Proid) REFERENCES Product(Prodid)
, qty number(6)
, supname char(15)
);
这个外键也指产品表的产品:
create table Sales(
Saleid number(9) primary key
, Proid number(5)
, CONSTRAINT fk_Product FOREIGN KEY(Proid) REFERENCES Product(Proid)
, qty number(6)
, custname char(15)
);
但是我收到了一个错误。 “已经被约束使用的名称。” 。解决这个问题的任何解决方案?我希望这两个表(Purchase& Sales)的外键引用到Product表的相同主键。
答案 0 :(得分:2)
问题正如@OldProgrammer和其他人所建议的那样,你在两种情况下都试图使用相同的约束名。您需要使用不同的约束名称。您可能希望为您的密钥使用某种命名约定 - 我更喜欢在名称中同时使用父级和子级的命名约定。所以我做了像
这样的事情create table Purchase(
Purid number(9) primary key
, Proid number(5)
, CONSTRAINT fk_purchase_product FOREIGN KEY(Proid) REFERENCES Product(Prodid)
, qty number(6)
, supname char(15)
);
create table Sales(
Saleid number(9) primary key
, Proid number(5)
, CONSTRAINT fk_sales_product FOREIGN KEY(Proid) REFERENCES Product(Proid)
, qty number(6)
, custname char(15)
);
与您的错误无关,但我非常怀疑任何列都应该声明为char(15)
。 varchar2(15)
几乎肯定更有意义 - 您不太可能希望将名称空间填充到15个字节,或者您希望在代码中使用char
比较语义。