2013-04-24 3 views
1

После того, как я впервые столкнулся с большим количеством злоупотреблений, я задал этот вопрос, я успокоился, и я снова пытаюсь и стараюсь быть более конкретным.SQL Oracle CREATE - неизвестная проблема

Я сделал назначение для 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 
) 

Перед тем, как сказать, что я указываю к таблицам, которые я еще не создал (и отметьте мой вопрос вниз). Обратите внимание, что в базе данных, которые я уже использую, были созданы таблицы WAREHOUSE и CITY.

Этот код работает и создает таблицы. Однако я получил 0 баллов из 10 без объяснения причин. Вышеуказанный код немного улучшен изначально, поскольку (я считаю), я исправил атрибуты NOT NULL.

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

The ERD можно найти в формате PDF на https://www.dropbox.com/sh/eohlj5h073kwp4u/Ot08kbdY7Q

Перед голосованием на этот вопрос вниз, пожалуйста, проконсультируйтесь со мной первым и я могу настроить его. Я новичок в этом сайте, чтобы дать мне шанс пожалуйста

+1

Почему это помечено как для MySQL, так и для Oracle? Какую базу данных вы используете? –

+0

Типы 'Number()' подразумевают Oracle ... Пожалуйста, удалите тег MySQL, если это правильно ... –

+0

Извините, я имел в виду SQL. Это лучше? –

ответ

1

Ваш синтаксис внешнего ключа - неправильный.

Попробуйте это:

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

Измените синтаксис, чтобы выглядеть выше.

Кроме того, ваш первичный ключ должен быть объявлен перед любой из ваших переменных.

Наконец, первичный ключ синтаксис оракула выглядит следующим образом:

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 * в приведенном выше примере к имени столбца.

+0

все они будут fk1, или это будет fk1, fk2 ... и т. д.? –

+0

@ DannyMahoney см. мое последнее обновление. Короче говоря, вы должны сделать им уникальные имена. –

+0

@DannyMahoney Читать: http: // www.techonthenet.com/oracle/primary_keys.php И: http://www.techonthenet.com/oracle/foreign_keys/foreign_keys.php –

0

Это неправильно:

Foreign Key (citycode) references CITY 

, потому что он не ссылается на поле в этой таблице.

Кроме того, они, как представляется, в неправильном порядке:

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

Я всегда объявляем все мои поля перед моими ключами.

Смежные вопросы