M:N关系SQL错误00904创建表时标识符无效

时间:2018-09-30 21:47:45

标签: sql database oracle entity-relationship ddl

我已经查找了如何创建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:无效的标识符” *原因:
*动作:

我的代码有什么问题吗?

2 个答案:

答案 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)

建议:请勿使用带引号的标识符。这只会使每个人的工作更加困难。您仍然可以使用transactionTransaction而不是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)
);