SQL Oracle кодирование с первичным (внешним) ключом и ссылками - PullRequest
0 голосов
/ 12 мая 2018

Привет, ребята. Я новичок в SQL и пытаюсь создать 2 таблицы: сотрудник и отдел с одним столбцом из таблицы, который ссылается на 2 столбца из другой таблицы, чтобы связать их друг с другом.

create table Employee
(
        employee_id Number,
        firstname varchar2(50 char),
        lastname varchar2(50 char),
        gender varchar2 (2 char),
        position varchar2(50 char),
        department_id number Not null,
        salary number Not null,
        Constraint employee_pk Primary key(employee_id)
);

create table products
(
        department_id Number, not null,
        department_name varchar2(50 char),
        Constraint products_fk Foreign key (department_id)
        references employee(department_id)
        );

Сообщение об ошибке -

ORA-00904: : invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:

Я не знаю, что я делаю с этим не так, я думаю, что проблема в ключах, я хочу отослать департамент (департамент_ид и отдел_имя) котдел_ид из таблицы сотрудников .... может кто-нибудь объяснить мне, в чем проблема? Изображение из 2 таблиц

1 Ответ

0 голосов
/ 12 мая 2018

Полученная вами ошибка говорит о том, что есть недопустимое имя столбца, и да - из-за лишней запятой в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...