我已经查找了如何创建M:N关系表。
这是我的SQL代码:
CREATE TABLE "product"(
"ProductID" INT PRIMARY KEY,
"ProductName" VARCHAR(25) NOT NULL,
"Price" NUMBER NOT NULL,
"Description" VARCHAR(25),
"Quantity" INT NOT NULL
);
CREATE TABLE "transaction"(
"TransactionID" INT PRIMARY KEY,
"Date" INT NOT NULL
);
CREATE TABLE "trade"(
"ProdID" INT REFERENCES "product"("ProductID"),
"TransID" INT REFERENCES "transaction"("TransactionID"),
"QuantityPurchased" INT NOT NULL,
PRIMARY KEY (TransID, ProdID)
);
当我运行它时,我得到:
错误报告 -
ORA-00904:“ TRANSID”:无效的标识符
00904. 00000-“%s:无效的标识符”
*原因:
*动作:
我的代码有什么问题吗?
答案 0 :(得分:2)
使用双引号会使标识符(在这种情况下为列名)区分大小写。坚持报价一致,就可以了:
CREATE TABLE "trade"(
"ProdID" INT REFERENCES "product"("ProductID"),
"TransID" INT REFERENCES "transaction"("TransactionID"),
"QuantityPurchased" INT NOT NULL,
PRIMARY KEY ("TransID", "ProdID")
-- Here -----^-------^--^------^
);
答案 1 :(得分:0)
建议:请勿使用带引号的标识符。这只会使每个人的工作更加困难。您仍然可以使用transaction
或Transaction
而不是TRANSACTION
,因为数据库会将未加引号的名称转换为默认的大写形式。定义某些内容时,双引号会使其他所有人在引用该特定项目时都使用双引号,使代码更难阅读,并为引用不匹配(例如此处出现的情况)打开了大门。另外,一些工作场所具有不允许引用标识符的编码标准。我建议:
CREATE TABLE product(
ProductID INT PRIMARY KEY,
ProductName VARCHAR(25) NOT NULL,
Price NUMBER NOT NULL,
Description VARCHAR(25),
Quantity INT NOT NULL
);
CREATE TABLE transaction(
TransactionID INT PRIMARY KEY,
transaction_Date INT NOT NULL
);
CREATE TABLE trade(
ProdID INT REFERENCES product(ProductID),
TransID INT REFERENCES transaction(TransactionID),
QuantityPurchased INT NOT NULL,
PRIMARY KEY (TransID, ProdID)
);