2015-10-07 68 views
0

找不到這些錯誤。一直在這工作太久請幫忙,我一直堅持這個約4個小時。sql創建表(foreign/ref key)(oracle)

CREATE TABLE Student 
 
(
 
student_id varchar(25), 
 
student_name varchar(25), 
 
major varchar(10), 
 
gpa number(3,2), 
 
PRIMARY KEY(student_id) 
 
); 
 

 

 
CREATE TABLE Class 
 
(
 
schedule_num varchar(25), 
 
semester varchar(25), 
 
course_name varchar(25), 
 
course_number varchar(25), 
 
credit varchar(4), 
 
department varchar(25), 
 
meeting_time varchar(25), 
 
meeting_place varchar(25), 
 
class_size_limit varchar (25), 
 
PRIMARY KEY(schedule_num,semester) 
 
); 
 

 

 
CREATE TABLE Enrolls 
 
(
 
semester varchar(25), 
 
grade varchar(2), 
 
PRIMARY KEY(student_id,schedule_num,semester), 
 
student_id varchar(25) FOREIGN KEY REFERENCES Student(student_id), 
 
schedule_num varchar(25) FOREIGN KEY REFERENCES Class(schedule_num), 
 
);

2個誤差---

1)錯誤 - 缺少右括號線6
2)ERROR - 表或視圖不存在線1

+0

我假設你要定義'enrolls'表中的錯誤。主鍵定義看起來不明智 - 鍵的三個組成部分都不是表中的列。你也不會使用'FOREIGN KEY REFERENCES',語法只是'REFERENCES'。我希望你想使用'varchar2'而不是'varchar',但這不會導致你的問題。 –

+0

所以我們根本不需要外鍵?你是什​​麼意思看起來不明智? – dexterpointer

+0

您嘗試在'enrolls'上定義複合主鍵。該組合鍵由三列組成 - 「student_id」,「schedule_num」和「學期」。 'student_id'不是表格中的一列。 'schedule_num'不是表中的列。使主鍵包含不存在的列是沒有意義的。要麼你想在你的表中包含這些列(這似乎是合理的),或者你想要以不同的方式定義關鍵字。用於定義內聯外鍵約束的語法不包括字面詞「外鍵」,只是「x引用tbl(x)」。 –

回答

0

您在第二行最後加了一個逗號。 schedule_num VARCHAR(25)的外鍵引用類(schedule_num)

即逗號可能導致兩個錯誤。

1

在Oracle中,您應該使用varchar2()而不是varchar()(出於非常神祕和歷史原因)。

當定義外和主鍵:

  • 外鍵需要主鍵完全匹配。
  • references關鍵字在內聯列定義時不使用foreign key
  • 複合外鍵不能在行中聲明。
  • 列需要定義才能用於約束。

Here是一個SQL小提琴,修復這些問題:

CREATE TABLE Student (
    student_id varchar2(25), 
    student_name varchar2(25), 
    major varchar2(10), 
    gpa number(3,2), 
    PRIMARY KEY(student_id) 
); 


CREATE TABLE Class (
    schedule_num varchar2(25), 
    semester varchar2(25), 
    course_name varchar2(25), 
    course_number varchar2(25), 
    credit varchar2(4), 
    department varchar2(25), 
    meeting_time varchar2(25), 
    meeting_place varchar2(25), 
    class_size_limit varchar2(25), 
    PRIMARY KEY(schedule_num, semester) 
); 

CREATE TABLE Enrolls (
    semester varchar2(25), 
    grade varchar2(2), 
    student_id varchar2(25) REFERENCES Student(student_id), 
    schedule_num varchar2(25), 
    FOREIGN KEY (schedule_num, semester) REFERENCES Class(schedule_num, semester), 
    PRIMARY KEY(student_id ,schedule_num, semester) 
);