2013-03-14 66 views
0

请在判断之前记住,我不明白这就是为什么我问这个问题。我对过去发生的一些倒计投票感到灰心。如何在Oracle10g中设置关键表到关系表中

我必须在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 ("ΚΩΔΜΗΝΥΜΑΤΟΣ") 
/ 
+0

你可以发布你的DDL语句吗? – 2013-03-14 02:40:17

+0

ΑΡΕΣΕΙ=样表名称 ΟΝΟΜΑΧΡΗΣΤΗ=用户名 ΣΥΓΦΕΑΣ_ΜΗΝΤΟΣ= message_author ΚΩΔΜΗΝΥΜΑΤΟΣ= message_code – n17n 2013-03-14 02:47:51

+0

要添加到FKS表,你没有显示的DDL。请为所有表显示所有相关的创建语句。 – OldProgrammer 2013-03-14 03:26:24

回答

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约束,它允许你把独特的,而不是空约束对列在同一时间。我建议您阅读docs.oracle.com上Oracle提供的文档以供参考。

此外,我希望你提到所有你的表名称和列名称在ASCII(AZ,AZ,0-9)字符。作为对象标识符的Unicode字符可能被支持但难以维护。