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

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

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
22.04.2021, 00:04
    #40064592
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign Key может быть Primary Key?
karnager,
все верно
...
Рейтинг: 0 / 0
22.04.2021, 00:05
    #40064593
karnager
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign Key может быть Primary Key?
Спасибо!
...
Рейтинг: 0 / 0
22.04.2021, 07:53
    #40064610
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Foreign Key может быть Primary Key?
karnager
получается я могу объединить данные двух таблиц по ключу order_id (id заказа), только в данном случае в таблице №2 он является Foreign Key, а в первой - это Primary Key.

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

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

Так что

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

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


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

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

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

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

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

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


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