SQL Oracle CREATE - 未知问题

时间:2013-04-24 01:42:24

标签: sql oracle

在我第一次接受大量滥用行为后,我问了这个问题,我已经平静下来,我正在尝试再次尝试更具体。

我为Uni做了一个作业,这是以下提示中的一个问题:

Write Create Table SQL statements for the relational schema that you have created
Place the text in the specified location in the file: ASS1_SQL.TXT
• All tables must have primary keys.
• All tables must have appropriate foreign key constraints.
• Each foreign key column must have identical column name, datatype and size of the primary key
that it refers to
• Add any NOT NULL constraints as dictated by the ERD
• The following columns data types and sizes must be used
suppid, stkid                 number(2)
suppname, stkname             varchar2(30)
sellprice, purchaseprice      number(6,2)

我对此的回应是:

CREATE Table SUPPLIER(
suppid Number(2) NOT NULL,
suppname varchar2(30),
stkid Number(2) NOT NULL,
citycode Number(2) NOT NULL,
Primary Key (suppid),
Foreign Key (citycode) references CITY
)

CREATE Table STOCKITEM( 
stkid Number(2) NOT NULL, 
stkname varchar2(30) , 
sellprice Number(6,2) , 
purchaseprice Number(6,2) , 
suppid Number(2) , 
Primary Key (stkid) , 
whid Number(2) NOT NULL, 
suppid Number(2) Foreign Key references SUPPLIER , 
whid Number(4) Foreign Key references WAREHOUSE 
)

在您说我指向我尚未创建的表(并标记我的问题)之前,请注意我已在数据库中创建WAREHOUSECITY表我已经在使用了。

此代码可以工作并创建表。但是,我在10分中得到0分,没有任何解释。上面的代码从最初稍微改进了(我相信)我修复了NOT NULL属性。

Do my NOT NULL and FOREIGN KEY Constraints seem to have the right syntax?

可以在https://www.dropbox.com/sh/eohlj5h073kwp4u/Ot08kbdY7Q

的pdf中找到ERD

在投票之前请先咨询我,我可以调整一下。我是这个网站的新手,请给我一个机会

2 个答案:

答案 0 :(得分:1)

您的外键语法不正确

试试这个:

CONSTRAINT fk1 FOREIGN KEY (suppid)
    REFERENCES STOCKITEM(suppid)

将语法更改为与上述类似。

此外,您的主键应在任何变量之前声明。

最后,oracle中的主键语法如下所示:

CONSTRAINT pk PRIMARY KEY (suppid));

完整代码:

CREATE Table SUPPLIER(
suppid Number(2) NOT NULL,
suppname varchar2(30),
stkid Number(2) NOT NULL,
citycode Number(2) NOT NULL,
CONSTRAINT pk1 PRIMARY KEY (suppid),
CONSTRAINT fk1 FOREIGN KEY (citycode) References ParentTable(primary_key_column)
)

CREATE Table STOCKITEM( 
stkid Number(2) NOT NULL, 
stkname varchar2(30) , 
sellprice Number(6,2) , 
purchaseprice Number(6,2) , 
suppid Number(2) , 
whid Number(2) NOT NULL, 
CONSTRAINT pk2 PRIMARY KEY (stkid),
CONSTRAINT fk2 FOREIGN KEY (suppid) References SUPPLIER(primary_key_column),
CONSTRAINT fk3 FOREIGN KEY (whid) References WAREHOUSE (primary_key_column)
)

注意:

当然,您需要将上面示例中的* primary_key_column *更改为您的列名。

答案 1 :(得分:0)

这是错误的:

Foreign Key (citycode) references CITY

因为它没有引用该表中的字段。

此外,这些似乎顺序错误:

Primary Key (stkid) , 
whid Number(2) NOT NULL,

我总是在我的钥匙前宣布我的所有字段。