Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курс по ОБД 13.docx
Скачиваний:
7
Добавлен:
01.07.2025
Размер:
692 Кб
Скачать
☆

Пример создания внешнего ключа и полная диаграмма бд

  1. Отдел кадров (Связывает таблицы "Сотрудники" и "Должности" по полю "Код должности").

ALTER TABLE BA_STAFF ADD (

CONSTRAINT w_fkey FOREIGN KEY (rt_position_id) REFERENCES BA_OFFICE (qb_id));

  1. Список клиентов (Связывает таблицы “Клиенты”, “Знаки зодиака”, “Отношения” и “Национальности” по полям “Код знака” “Код отношения” и “Код национальности”).

ALTER TABLE BA_CLIENTS ADD (

CONSTRAINT w_fkey1 FOREIGN KEY (fr_id_zodiac) REFERENCES BA_ZODIAC (lw_id),

CONSTRAINT w_fkey2 FOREIGN KEY (fr_id_relation) REFERENCES BA_relation (kw_id),

CONSTRAINT w_fkey3 FOREIGN KEY (fr_id_nation) REFERENCES BA_NATION (lr_id));

  1. Список услуг (Связывает таблицы “Услуги”, “Клиенты”, “Дополнительные услуги” и “Сотрудники” по полям “Код клиента”,

“Код услуги 1”, “Код услуги 2”, “Код услуги 3” и “Код сотрудника”).

ALTER TABLE BA_SERVIC ADD (

CONSTRAINT w_fkey4 FOREIGN KEY (te_id_client) REFERENCES BA_CLIENTS (fr_id),

CONSTRAINT w_fkey5 FOREIGN KEY (te_id_services1) REFERENCES BA_SERVICES (ze_id),

CONSTRAINT w_fkey6 FOREIGN KEY (te_id_services2) REFERENCES BA_SERVICES (ze_id),

CONSTRAINT w_fkey7 FOREIGN KEY (te_id_services3) REFERENCES BA_SERVICES (ze_id),

CONSTRAINT w_fkey8 FOREIGN KEY (te_id_staff) REFERENCES BA_STAFF (rt_id));

Фильтры

Для реляционных баз данных естественным является хранение информации во множестве таблиц. Иногда необходимо получить данные одна часть которых хранится в одной таблице, а вторая в другой. Эти части обычно связываются по некоторому условию (ключу).

Простейшим способом соединения (join) является перечисление всех объединяемых таблицы в списке FROM. В этом случае СУБД соединяет каждую строку первой таблицы с каждой строкой второй таблицы. Такое объединение называется перекрестным или декартовым произведением.

Конструкция WHERE с соответствующим условием объединения устраняет ненужные строки в перекрестном объединении. В списках SELECT, ORDER BY, в конструкции WHERE и в аргументах функций и операторов могут использоваться все столбцы всех включенных в объединение таблиц.

По умолчанию такой SQL-запрос получит только те строки, которые точно удовлетворяют условия. На практике же бывает необходимо включить в результат все строки одной таблицы и соответствующие им столбцы другой, даже если во второй для них не найдено соответствия. Это вопрос решается с помощью указания во фразе WHERE знака плюс (+) после столбца таблицы, которую необходимо включить полностью. Такое описание условия отбора сообщает Oracle о том, что необходимо вернуть из одной таблицы даже те, которые не удовлетворяют заданному условию.

Объединений имеет следующую классификацию:

Внешние соединения (outer) использующие для представления данных все записи одной таблицы и соответствующие им значения из другой.

Внутренние соединения (inner) для представления данных хранящихся в одной таблице, но в разных столбцах (как в примере выше).

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

В многотабличных запросах можно использовать несколько внешних объединений. При этом оператор внешнего объединения не может быть использован в условии, которое объединено с другим условием с помощью логического оператора OR или в операторе IN.