Как связать две таблицы в СУБД?

Я создал две таблицы EMP и DEPT; теперь я хочу связать эти две таблицы. То есть данные одной таблицы будут поступать в другую таблицу. Как это возможно?


person Community    schedule 03.07.2009    source источник


Ответы (4)


В одном отделе может быть много сотрудников; это классическая связь "один ко многим".

Обе таблицы должны иметь первичные ключи; поместите ВНЕШНИЙ КЛЮЧ в таблицу сотрудников, чтобы указать на его отдел.

person duffymo    schedule 03.07.2009

Классически таблица DEPT будет иметь столбец первичного ключа, такой как DeptNum. Таблица EMP также будет содержать столбец DeptNum того же типа, что и DEPT.DeptNum. Когда вы вставляете запись в EMP, вы гарантируете, что значение DeptNum соответствует правильному отделу в DEPT.

Вы заставляете СУБД обеспечивать это, объявляя, что EMP.DeptNum является внешним ключом, который ссылается на DEPT.DeptNum. Тогда СУБД будет

  1. предотвратить вставку или обновление значения в EMP.DeptNum, которое не соответствует значению в DEPT.DeptNum, и
  2. предотвратить удаление или обновление значения в DEPT.DeptNum, в котором все еще есть строки в EMP, использующие номер отдела.
person Jonathan Leffler    schedule 03.07.2009

duffymo и Джонатан Леффлер дали вам решение.

Кроме того, если вы хотите увидеть проделанную работу, вы можете посмотреть на «HR-схему». Схема HR (Human Resources) обычно устанавливается в качестве примера, когда вы устанавливаете oracle, и у вас есть таблица en EMP и таблица DEPT, связанные именно так, как вы хотите.

person Jonathan    schedule 03.07.2009

Либо вы создаете ограничение внешнего ключа при создании таблиц

CREATE TABLE table_name
(column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT fk_column
  FOREIGN KEY (column1, column2, ... column_n)
  REFERENCES parent_table (column1, column2, ... column_n)
);

или Использование инструкции ALTER TABLE

e.g.

ALTER TABLE table_name
add CONSTRAINT constraint_name
  FOREIGN KEY (column1, column2, ... column_n)
  REFERENCES parent_table (column1, column2, ... column_n);

Например:

ALTER TABLE EMP
add CONSTRAINT fk_dept
  FOREIGN KEY (dept_id)
  REFERENCES dept(dept_id);

Я предполагаю, что, поскольку вы отметили этот вопрос как Oracle, вам нужен ответ для Oracle. Другие БД могут немного отличаться.

Прочитав ваш вопрос еще раз, вы также хотите знать, как связать их вместе в SQL-запросе? Если да, то вам нужно соединение.

например если есть столбец имени и идентификатора для таблиц emp и dept, то это объединит их

select emp.name, dept.name from emp inner join dept where emp.id = dept.id

Это то, что вам нужно?

person hookenz    schedule 15.07.2009