0

请在判断之前记住,我不明白这就是我问这个问题的原因。我对过去发生的一些反对票感到沮丧。

我必须在 Oracle 10g 中创建一个数据库,并且我正在使用模板来创建一个新表。该数据库是关于一个虚构的 facebook 应用程序。

除其他外,它包括具有 3 个属性的关系“喜欢”,所有这些属性都应该是键:

like:

username: key
message_author: key
message_code: key

正如我所说的那样,是两个实体用户和消息之间的关系。

我尝试将表设置为连接到其他表的 3 个外键,但 oracle 不会接受它。

我收到以下错误消息:

创建 FK like_FK2 失败 ORA-02270: 此列列表没有匹配的唯一键或主键

ORA-00942: 表或视图不存在

ORA-06510: PL/SQL: 未处理的用户定义异常

我想我的钥匙做错了,但我不明白它是什么

SQL 命令:

CREATE table "ΑΡΕΣΕΙ" (
    "ΟΝΟΜΑΧΡΗΣΤΗ"    VARCHAR2(30) NOT NULL,
    "ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ" VARCHAR2(30) NOT NULL,
    "ΚΩΔΜΗΝΥΜΑΤΟΣ"   NUMBER NOT NULL
)
/

ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK" 
    FOREIGN KEY ("ΟΝΟΜΑΧΡΗΣΤΗ")
    REFERENCES "ΧΡΗΣΤΗΣ" ("ΟΝΟΜΑΧΡΗΣΤΗ")

/
ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK2" 
    FOREIGN KEY ("ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ")
    REFERENCES "ΜΗΝΥΜΑ" ("ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ")

/
ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK3" 
    FOREIGN KEY ("ΚΩΔΜΗΝΥΜΑΤΟΣ")
    REFERENCES "ΜΗΝΥΜΑ" ("ΚΩΔΜΗΝΥΜΑΤΟΣ")

/
alter table "ΑΡΕΣΕΙ" add
    constraint ΑΡΕΣΕΙ_UK1
    unique ("ΚΩΔΜΗΝΥΜΑΤΟΣ")
/   
4

1 回答 1

0

在指定任何关系约束和其他约束UNIQUE之前,请确保在编码和运行这些语句之前表存在。我在回答中稍微编辑了您的代码:

CREATE table "ΑΡΕΣΕΙ" (
    "ΟΝΟΜΑΧΡΗΣΤΗ"    VARCHAR2(30) NOT NULL,
    "ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ" VARCHAR2(30) NOT NULL,
    "ΚΩΔΜΗΝΥΜΑΤΟΣ"   NUMBER(10,2) NOT NULL -- PRECISION AND SCALE MUST BE MENTIONED FOR NUMBER DATA TYPE
)
/

CREATE table "ΜΗΝΥΜΑ" (
     "ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ"  VARCHAR2(30) -- data types are recommended to be the same
     "ΚΩΔΜΗΝΥΜΑΤΟΣ"    NUMBER(10,2)
     -- Other columns go here
)
/

CREATE TABLE "ΧΡΗΣΤΗΣ" (
     "ΟΝΟΜΑΧΡΗΣΤΗ"     VARCHAR(30)
     -- Other columns go here
)
/

-- After you create all the tables, you can code the alter table statements
-- that would add all your necessary constraints.

ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK" 
    FOREIGN KEY ("ΟΝΟΜΑΧΡΗΣΤΗ")
    REFERENCES "ΧΡΗΣΤΗΣ" ("ΟΝΟΜΑΧΡΗΣΤΗ")
/

ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK2" 
    FOREIGN KEY ("ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ")
    REFERENCES "ΜΗΝΥΜΑ" ("ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ")
/

ALTER TABLE "ΑΡΕΣΕΙ" ADD CONSTRAINT "ΑΡΕΣΕΙ_FK3" 
    FOREIGN KEY ("ΚΩΔΜΗΝΥΜΑΤΟΣ")
    REFERENCES "ΜΗΝΥΜΑ" ("ΚΩΔΜΗΝΥΜΑΤΟΣ")
/

alter table "ΑΡΕΣΕΙ" add
    constraint ΑΡΕΣΕΙ_UK1
    unique ("ΚΩΔΜΗΝΥΜΑΤΟΣ")
/   

另外,请记住,有一个称为约束PRIMARY KEY,它允许您同时在列上放置唯一且非空的约束。我建议您阅读 Oracle 在 docs.oracle.com 上提供的文档以供参考。

另外,我希望您以 ASCII(az、AZ、0-9)字符提及所有表名和列名。Unicode 字符作为对象标识符可能受支持,但难以维护。

于 2013-03-14T03:42:28.140 回答