powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Foreign Key может быть Primary Key?
6 сообщений из 6, страница 1 из 1
Foreign Key может быть Primary Key?
    #40064591
karnager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Подскажите, пожалуйста, правильно ли я понимаю понятия внешнего и внутреннего ключа. И если да, может ли быть внешний ключ в одной таблице первичным ключом в другой таблице?

Приведу пример двух таблиц:

1. таблица с заказами, в которой есть 2 столбца: order_id (id заказа, он же primary key) и имя человека (firstname)
2. таблица с продуктами, которые купили, в которой есть 5 столбцов: order_product_id (id заказов продукта, он же primary key), order_id (id заказа), product_id (id продукта), name (наименование товара) и price (цена товара).

И получается я могу объединить данные двух таблиц по ключу order_id (id заказа), только в данном случае в таблице №2 он является Foreign Key, а в первой - это Primary Key. Верны ли рассуждения и не запутался ли я в терминологии? Спасибо
...
Рейтинг: 0 / 0
Foreign Key может быть Primary Key?
    #40064592
bideveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karnager,
все верно
...
Рейтинг: 0 / 0
Foreign Key может быть Primary Key?
    #40064593
karnager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
Foreign Key может быть Primary Key?
    #40064610
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karnager
получается я могу объединить данные двух таблиц по ключу order_id (id заказа), только в данном случае в таблице №2 он является Foreign Key, а в первой - это Primary Key.

Primary key - это структура внутри структуры таблицы, плюс дополнительные правила для подсистемы контроля данных.
Foreign key - это вообще не структура, а только правило для подсистемы контроля данных.

Для эффективной работы подсистемы контроля требуется, чтобы выражение во внешней таблице, на которую ссылается Foreign key, было префиксом какого-то индекса. При создании FK наличие такого индекса проверяется, и при отсутствии FK не создаётся. Хотя после создания индекс можно удалить без последствий, если не считать резкого замедления процесса контроля, ведь теперь для проверки придётся шерстить всю таблицу.

Так что

1) Связи между тем, что где чем является, и тем, чем оно может быть, тут у Вас вообще никакой нет. Кроме факта, что FK будет успешно создан по причине наличия подходящего индекса в таблице, на которую создаётся ссылка (при пустой таблице заказов или при валидных данных в ней).

2) Никакого фактического объединения данных не происходит - при создании FK Вы просто создаёте немедленно и безусловно применяемое правило автоматической проверки данных.
...
Рейтинг: 0 / 0
Foreign Key может быть Primary Key?
    #40064699
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karnager
Всем привет! Подскажите, пожалуйста, правильно ли я понимаю понятия внешнего и внутреннего ключа.


Нет внутренних ключей. Это называется "первичный ключ".

автор И если да, может ли быть внешний ключ в одной таблице первичным ключом в другой таблице?

Внешний ключ в дочерней таблице всегда является первичным ключём в родительской таблице .
(ну, почти всегда, может быть ещё альтернативным ключём, unique, но так делают очень-очень редко.)

Внешний ключ в дочерней таблице может является первичным ключём в дочерней таблице ,
может является частью первичного ключа в дочерней таблице ,
может может быть просто атрибутом в дочерней таблице ,
...
Рейтинг: 0 / 0
Foreign Key может быть Primary Key?
    #40064868
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Внешний ключ в дочерней таблице может является первичным ключём в дочерней таблице ,
может является частью первичного ключа в дочерней таблице ,
может может быть просто атрибутом в дочерней таблице ,

Внешний ключ - это, блин, правило !!! так что он в принципе не может быть частью первичного ключа или атрибутом.

MasterZiv
всегда является первичным ключём в родительской таблице .
Сказки. Формально он даже уникальным быть не обязан (правда, возникнут проблемы с идентификации связи и каскадными операциями). Более того - после создания внешнего ключа индекс можно вообще удалить.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Foreign Key может быть Primary Key?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]