double arrow

PRODUCTS_TBL

ORDERS_TBL

CUSTOMER_TBL

Вопросы связывания

Связывание по нескольким ключам

В большинстве случаев связывание таблиц осуществляется по одному ключевому полю одной таблицы и одному ключевому полю другой. Но в зависимости от структуры базы данных для вас может оказаться возможным связать таблицы и по нескольким ключам. В таблице может иметься ключ, составленный из значений не одного, а нескольких столбцов. Точно так же из нескольких столбцов может состоять и внешний ключ.

Рассмотрим следующие таблицы.

PROD:

SERIAL_NUMBER NOT NULL NUMBER(10)

VENDOR_NUMBER NOT NULL NUMBER(10)

PRODUCT_NAME NOT NULL VARCHAR2(10)

COST NOT NULL NUMBER (8, 2)

ORD:

ORD_NO NOT NULL NUMBER(10)

SERIAL_NUMBER NOT NULL NUMBER(10)

VENDOR_MUMBER NOT NULL NUMBER(10)

QUANTITY NOT NULL NUMBER(5)

ORD_DATE NOT NULL DATE

Ключом в таблице PROD является комбинация столбцов SERIAL_NUMBER и VENDOR_NUMBER Вероятно, в данной торговой компании некоторые товары имеют один серийный номер, но различаются по коду производителя.

Внешним ключом в таблице ORD тоже является комбинация столбцов

SERIAL_NUMBER И VENDOR_NUMBER.

При выборе данных из обеих таблиц (PROD и ORD) оператор связывания может выглядеть следующим образом:

SELECT Р.PRODUCT_NAME, O.ORD_DATE, О.QUANTITY

FROM PROD P, ORD О

WHERE P.SERIAL_NUMBER = O.SERIAL_NUMBER AND P.VENDOR_NUMBER = О.VENDOR_NUMBER;

Прежде чем использовать связывание, следует получить ответы на ряд важных вопросов. Например, какие из столбцов необходимо связать, имеются ли общие столбцы вообще, а также вопросы оптимизации. Вопросы оптимизации будут рассматриваться в ходе урока 18, «Управление доступом к базе данных».

Использование связующей таблицы

Как осуществить связывание? Если нужно связать таблицы, не имеющие общих столбцов, необходимо использовать третью таблицу, имеющую общие столбцы, как с первой, так и со второй таблицей. Такая таблица называется связующей таблицей.

Связующую таблицу можно использовать для связывания как таблиц с общими столбцами, так и таблиц, не имеющих общих столбцов.

Для примера использования связующей таблицы рассмотрим следующие три таблицы.

CUST_ID VARCHAR2(10) NOT NULL Ключевое поле

CUST_NAME VARCHAR2(30) NOT NULL

CUST_ADDRESS VARCHAR2(20) NOT NULL

CUST_CITY VARCHAR2(15) NOT NULL

CUST_STATE CHAR(2) NOT NULL

CUST_ZIP NUMBER(5) NOT NULL

CUST_PHONE NUMBER(10)

CUST_FAX NUMBER(10)

ORD_NUM VARCHAR2(10) NOT NULL Ключевое поле

CUST_ID VARCHAR2(10) NOT NULL

PROD_ID VARCHAR2(10) NOT NULL

QTY NUMBER(6) NOT NULL

ORD_DATE DATE

PROD_ID VARCHAR2(10) NOT NULL Ключевое поле

PROD_DESC VARCHAR2(40) NOT NULL

COST NUMBER (6,2) NOT NULL

Необходимо использовать таблицы CUSTOMER_TBL и PRODUCTS_TBL. У этих таблиц нет общих столбцов, по которым можно было бы выполнить связывание. Приходится использовать таблицу ORDERS_TBL, в которой имеется поле CUST_ID, присутствующее и в таблице CUSTOMER_TBL, и в таблице PRODUCTS_TBL. Условия связывания и результаты выглядят следующим образом.

SELECT C.CUST_NAME, P.PROD_DESC

FROM CUSTOMER_TBL С, PRODUCTS_TBL P, ORDERS_TBL О

WHERE C.CUST_ID = O.CUST_ID AND P.PROD_ID = O.PROD_ID;

CUST_NAME PROD_DESC

LESLIE GLEASON КОСТЮМ ВЕДЬМЫ

SCHYLERS NOVELTIES ПЛАСТИКОВЫЕ ТЫКВЫ

WENDY WOLF ПЛАСТИКОВЫЕ ТЫКВЫ

GAVINS PLACE ФОНАРИ

SCOTTYS MARKET ИСКУССТВЕННЫЕ ПАРАФИНОВЫЕ ЗУБЫ

ANDYS CANDIES ЦЕПОЧКА ДЛЯ КЛЮЧЕЙ

Обратите внимание на назначение таблицам псевдонимов и их использование в выражении ключевого слова WHERE.


Сейчас читают про: