2013-03-14 65 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字符可能被支持但難以維護。