Страница 7 из 250 ются гарантированная уникальность значений (ее обеспечивает СУБД), постоянство значений (может меняться значение атрибута, но не значение искусственного ключа), а также числовой тип данных (поиск по числовым значениям выполняется намного быстрее, чем по символьным). Еще одна функция первичного ключа - организация связей между таблицами. Связи между таблицами. Внешний ключ Реляционная база данных - это не просто набор таблиц. Объединить разрозненные фрагменты информации в единую структуру данных позволяют связи между таблицами, посредством которых строка одной таблицы сопоставляется строке (строкам) другой таблицы. Благодаря связям можно извлекать информацию одновременно из нескольких таблиц (например, выводить с помощью одного запроса и сведения о клиенте, и сведения о его заказах), избегать дублирования информации (не требуется в каждом заказе хранить адрес клиента), поддерживать полноту информации (не хранить сведения о заказанном товаре, если в базе данных отсутствует его описание) и многое другое. Рассмотрим на примере, что такое связь между таблицами. Допустим, у нас есть таблицы A и B, и мы хотим их связать. Для этого в каждую строку таблицы A мы должны поместить некую информацию, позволяющую идентифицировать связанную с ней строку таблицы B. Эта информация называется ссылкой, а поля таблицы A, содержащие эту ссылку, - внешними ключами. Наверное, вы уже сами догадались, что в качестве ссылки используется первичный ключ таблицы B, поскольку именно его значения позволят однозначно идентифицировать нужную строку таблицы B. После того как мы во все строки таблицы A поместим ссылки на строки таблицы B, эти таблицы будут связаны. При этом таблица A будет называться дочерней, а таблица B - родительской. Существует три типа связей, устанавливаемых между таблицами в базе данных. • Связь «один ко многим». Этот тип связи используется чаще всего. В этом случае одна или несколько строк таблицы A ссылаются на одну из строк таблицы B. Для установки связи между таблицами в дочернюю таблицу добавляется внешний ключ (foreign key) - один или несколько столбцов, содержащих значения первичного ключа родительской таблицы (иными словами, во внешнем ключе хранятся ссылки на строки родительской таблицы). Рассмотрим таблицу, которая содержит сведения о заказах, сделанных клиентами, и является дочерней по отношению к таблице Customers (Клиенты) (табл. 1.2). Таблица 1.2. Orders (Заказы) id (идентификатор) | date (дата) | product_id (товар) | qty (количество) | amount (сунна) | customerjd (клиент) | 1012 | 12.12.2007 | 5 | | Ш0 | 533 | 1013 | 12.12.2007 | 2 | 14 | 22 000 | ъзъ | 1014 | 21,01.2008 | 5 | 12 | 5750 | |
В таблице Orders внешним ключом является столбец customer_id (клиент), в котором содержатся номера клиентов из таблицы Customers (Клиенты). Таким образом, каждая строка таблицы Orders ссылается на одну из строк таблицы Customers. Например, строка с идентификационным номером 1012 содержит в столбце customer_id (клиент) значение 533:это означает, что заказ № 1012 сделан клиентом ООО «Кускус». 11
|