Главная | Форум | Статьи | Фaйлы| Картинки WoW | Профиль | Регистрация | Вход

[ Новые сообщения · Правила форума · Поиск · RSS ]

WoW-Info — информационный World of Warcraft портал

Внешние ключи - Форум

  • Сторінка 1 з 1
  • 1
Внешние ключи
ADRE[N]ALINEДата: Неділя, 05.12.2010, 02:05 | Сообщение # 1



ADRE[N]ALINE
Сержант
Группа: Пользователи
Сообщений: 126

Замечания:

Оффлайн
Внешние ключи

Внешний ключ — это столбец одной таблицы, значения которого совпадают со значениями столбца, являющегося первичным ключом другой таблицы. Внешние ключи — очень важная часть механизма обеспечения ссылочной целостности данных. Чтобы разобраться в том, что собой представляют внешние ключи, рассмотрим следующий пример.
Таблица Orders содержит единственную строку для каждого заказа, зафиксированного в базе данных. Информация о клиенте хранится в таблице Customers. Заказы в таблице Orders связаны с определенными строками в таблице Customers за счет идентификатора клиента. Идентификатор клиента является первичным ключом в таблице Customers; каждый клиент имеет уникальный идентификатор. Номер заказа является первичным ключом в таблице Orders; каждый заказ имеет свой уникальный номер.

Значения в столбце таблицы Orders, содержащем идентификаторы клиентов, не обязательно уникальные. Если клиент сделал несколько заказов, может быть несколько строк с тем же самым идентификатором клиента (хотя каждая из них будет иметь свой номер заказа). В то же время единственные значения, которые могут появиться в столбце идентификаторов клиента таблицы Orders, — это идентификаторы клиентов из таблицы Customers.

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

Вот один из способов определения внешнего ключа:

CREATE TABLE Orders
(
order_num INTEGER NOT NULL PRIMARY KEY,
order_date DATETIME NOT NULL,
cust_id CHAR (10) NOT NULL REFERENCES
Customers (cust_id)
);

Это определение таблицы, использующее ключевое слово REFERENCES для утверждения того факта, что любое значение в столбце cust_id должно быть также и в столбце cust_id таблицы Customers.

Того же результата можно было бы добиться с использованием синтаксиса CONSTRAINT в операторе ALTER TABLE:
ALTER TABLE Customers
ADD CONSTRAINT
FOREIGN KEY (cust_id) REFERENCES Customers (cust_id)

Внешние ключи могут воспрепятствовать случайному удалению данных

В дополнение к тому, что внешние ключи помогают принудительно сохранять целостность ссылочных данных, они могут выполнять много других важных функций. После того как внешний ключ определен, ваша СУБД не позволит удалять строки, связанные со строками в других таблицах. Например, вы не сможете удалить информацию о клиенте, у которого есть заказы. Единственный способ удалить информацию о таком клиенте состоит в предварительном удалении связанных с ним заказов (для чего, в свою очередь, нужно удалить информацию о предметах этих заказов). Поскольку требуется столь методичное и целенаправленное удаление, внешние ключи могут оказать помощь в предотвращении случайного удаления данных.
Однако в некоторых СУБД поддерживается возможность, получившая название каскадноеудаление. Если такая функция реализована, можно удалять все связанные с этой строкой данные при удалении ее из таблицы. Например, если возможно каскадное удаление и имя клиента удаляется из таблицы Customers, все связанные с его заказом строки удаляются автоматически.



 
  • Сторінка 1 з 1
  • 1
Пошук:

Новые сообщения в темах
Сдам в аренду сервер и хостинг · (Хост Предложения)
Автор: redlaine
Последнее сообщение в 23:53
Локализация баз для Trinity! · (Базы TrinityCore)
Автор: pro[100]Deadly
Последнее сообщение в 16:19
[Гайд] - Ездовые животные · (Гайды по WoW)
Автор: Darkensand
Последнее сообщение в 12:59
Тактика: Безумие Смертокрыла (... · (Тактики WoW)
Автор: Darkensand
Последнее сообщение в 21:16
Обновление 581 , 580(FULL) · (Базы TrinityCore)
Автор: Ganstar
Последнее сообщение в 21:42
Cataclysm: Новые способности Ч... · (Чернокнижник)
Автор: Darkensand
Последнее сообщение в 15:22
▃ ▅ █ STRIKE-DEATH | WOTL... · (Обычные сервера WoW)
Автор: Pensukdeath
Последнее сообщение в 05:18
[Осбуждение] - Друиды · (Классы)
Автор: Grimus
Последнее сообщение в 17:43
ARQ - Бот для слива арены · (Боты для WoW)
Автор: Darkensand
Последнее сообщение в 17:42
AlphaMap · (Проверенные аддоны для WoW)
Автор: ADRE[N]ALINE
Последнее сообщение в 17:42
Новая группа v2.0 · (Работа портала)
Автор: Grimus
Последнее сообщение в 17:41
ACID Полный · (Базы Mangos)
Автор: ADRE[N]ALINE
Последнее сообщение в 17:40
Juked · (Проверенные аддоны для WoW)
Автор: Darkensand
Последнее сообщение в 17:39
Готовый сервер 1.12.1 · (Корзина)
Автор: aspect165
Последнее сообщение в 17:39
Набор в команду WoW-Info.net! · (Работа портала)
Автор: Darkensand
Последнее сообщение в 17:38

Контакты Контакты Copyright WoW-Info — World of Warcraft портал © 2026 | Условия и правила использования ресурса | Реклама / Услуги
WoW-Info портал.World of Warcraft портал — готовые сервера, сайты, картинки, аддоны, патчи, читы, баги, mangos, ArcEmu, TrinityCore, Warcraft 3, новости, Cataclysm...
Яндекс.Метрика Хостинг від uCoz