Полученная вами ошибка говорит о том, что есть недопустимое имя столбца, и да - из-за лишней запятой в CREATE TABLE PRODUCTS
здесь:
department_id Number, not null,
^
this
Как только вы исправите это и снова запустите команду, вы получите эту ошибку:
5 Constraint products_fk Foreign key (department_id)
6 references employee(department_id)
7 );
references employee(department_id)
*
ERROR at line 6:
ORA-02270: no matching unique or primary key for this column-list
Это означает, что вы не можете создать внешний ключ, который указывает на столбец, который не является уникальным или первичным ключом в таблице employee
. Там первичный ключ - employee_id
, что правильно. Не имеет смысла делать столбец department_id
первичным ключом, поскольку очевидно, что в одном и том же отделе может работать более одного сотрудника, поэтому вы нарушите уникальность.
Если вы дважды подумаете, имеет ли смысл ссылаться на отдел в таблице employee
? Я бы сказал, что нет, но было бы разумно сослаться на department_id
, который является первичным ключом в таблице department
.
Но эй! Ваша таблица product
выглядит точно так же, как должна department
- в ней есть department_id, department_name
столбцы. Что это за «продукт»? Вы уверены, что сделали все правильно?
Следующий код имеет для меня гораздо больше смысла; Вы не согласны?
SQL> -- former PRODUCT table
SQL> CREATE TABLE department (
2 department_id NUMBER
3 CONSTRAINT pk_depart PRIMARY KEY,
4 department_name VARCHAR2(50 CHAR)
5 );
Table created.
SQL> CREATE TABLE employee (
2 employee_id NUMBER,
3 firstname VARCHAR2(50 CHAR),
4 lastname VARCHAR2(50 CHAR),
5 gender VARCHAR2(2 CHAR),
6 position VARCHAR2(50 CHAR),
7 department_id NUMBER NOT NULL
8 CONSTRAINT fk_emp_dept
9 REFERENCES department ( department_id ),
10 salary NUMBER NOT NULL,
11 CONSTRAINT employee_pk PRIMARY KEY ( employee_id )
12 );
Table created.
SQL>