powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / составной первичный ключ как внешний
16 сообщений из 16, страница 1 из 1
составной первичный ключ как внешний
    #36653608
bukinator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажите, если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным или можно в качестве внешнего использовать только часть ключа? если можно использовать только часть ключа, какое тогда будет отношение со стороны первичного ключа - один или много?
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36653638
=Lucky=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bukinatorСкажите, если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным или можно в качестве внешнего использовать только часть ключа? если можно использовать только часть ключа, какое тогда будет отношение со стороны первичного ключа - один или много?
Забавный вопрос.Если у Вас не нарушена нормальная форма(НФБК), то это обязательное условие.
Если нарушена и у Вас составной ключ из 2х атрибутов имеет атрибут, который является identity для таблицы..то логично, что достаточно связывать по одному атрибуту :-)..но тогда Вам можно начинать ломать руки :-))
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36653760
bukinator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
=Lucky=bukinatorСкажите, если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным или можно в качестве внешнего использовать только часть ключа? если можно использовать только часть ключа, какое тогда будет отношение со стороны первичного ключа - один или много?
Забавный вопрос.Если у Вас не нарушена нормальная форма(НФБК), то это обязательное условие.
а составные ключи ведь не запрещены? с чего вдруг будет нарушена нормальная форма? даже в определениях нормальных форм сказано про составной ключ: 1НФ-атрибуты зависят от всего составного ключа, а не от его части; 2НФ-атрибуты не зависят не от чего, кроме ключа
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36653782
=Lucky=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bukinatorа составные ключи ведь не запрещены? с чего вдруг будет нарушена нормальная форма? даже в определениях нормальных форм сказано про составной ключ: 1НФ-атрибуты зависят от всего составного ключа, а не от его части; 2НФ-атрибуты не зависят не от чего, кроме ключа

Я Вам привел название нормальной формы(полное её название: Нормальная форма Бойса-Клодда ) и в каком случае она будет нарушена :-)

Если она не нарушена, то каким образом вы однозначно идентифицируете картеж в сущности, для которой в качестве первично ключа будет являться составной первичный ключ, а вы будите использовать лишь часть этого первичного ключа???Подумайте сами...

Ну и почитайте книги по теории реляционных БД.
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36653789
=Lucky=
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
=Lucky=,блин....немного описАлся...Бойcа-Кодда :-)
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36654174
bukinator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а может такое быть, что первичный ключ из первой таблицы будет так же первичным ключом из второй таблицы, но уже как часть составного? или первичный ключ одной таблицы может быть только внешним для другой? мне тут срочно бд надо заделать, а я реляционную теорию вспомнить не могу, читать долго слишком.
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36654286
bukinator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну в общем есть таблица "точки" и есть таблица "продукты" , каждый продукт может быть во многих точках и каждая точка может иметь несколько продуктов. я сделал таблицу "точки" в которой первичный ключ="id_point" и таблицу "продукты" в которой первичный ключ = составной ключ "id_point"+"type_product", и ключ "id_point" из первой таблицы связан с ключем "id_point" из второй таблицы. В общем, это неправильно у меня получилось или как? помогите сделать правильную таблицу.
можно конечно сделать так: в таблицу "продукты" добавить атрибут "id", сделать его ключем, а те атрибуты, которые щас входят в составной ключ, сделать не ключевыми. тогда вроде проблемы нет, но мне почему то кажется, что лучше оставить составной ключ, так как если ключем сделать атрибут "id", то в таблицу теоретически можно будет добавлять записи с одинаковым значением неключевых атрибутов (например первая запись - id=1, id_point=55, type_product=kefir и вторая запись - id=2, id_point=55, type_product=kefir и т.д) а это неправильно.
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36654373
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bukinator...или можно в качестве внешнего использовать только часть ключа? если можно использовать только часть ключа, какое тогда будет отношение со стороны первичного ключа - один или много?
Можно, если на эту "часть" наложено ограничение уникальности.
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36654391
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При создании модели БД по-уму начинают с логической модели, в которой никаких ID (ключей, не имеющих логического смысла) нет.
Судя по всему, у вас должна быть примерно такая логическая структура таблиц:

Код: plaintext
1.
2.
3.
Точки (Название varchar PK)
ТипыПродуктов (Название varchar PK)
Продукты (Название varchar, Тип varchar) PK = Название + Тип
ТочкиПродукты (НазваниеТочки, НазваниеПродукта, ТипПродукта) PK = все три

Если вы поклонник Джо Селко, то физическая структура должна быть такой-же. А если хотите разработать систему, которая будет реально работать, то в физической модели необходимо добавить id-шники для каждой сущности которые и становятся РК

Код: plaintext
1.
2.
3.
Точки (ID int PK, Название varchar)
ТипыПродуктов (ID int PK, Название varchar)
Продукты (ID int PK, Название varchar, IDТипa int) 
ТочкиПродукты (IDТочки, IDПродукта) PK = IDТочки + IDПродукта

Поля, которые раньше были РК превращаются в логические ключи и на них навешиваются уникальные индексы
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36655372
bukinator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StalkerS
Код: plaintext
1.
2.
3.
Точки (ID int PK, Название varchar)
ТипыПродуктов (ID int PK, Название varchar)
Продукты (ID int PK, Название varchar, IDТипa int) 
ТочкиПродукты (IDТочки, IDПродукта) PK = IDТочки + IDПродукта

Это вроде то же самое получилось, как и у меня. Таблица ТочкиПродукты содержит составной ключ связанный с первичными ключами из других таблиц. Я в первом посте спрашивал "если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным" и мне ответили что ДА, но тут-то получается, что составной ключ из таблицы ТочкиПродукты не входит в состав других таблиц как составной, а входит по частям.
И какая тут связь получается между таблицами, 1-1 или много-1 ?
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36655584
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bukinatorЭто вроде то же самое получилось, как и у меня. Таблица ТочкиПродукты содержит составной ключ связанный с первичными ключами из других таблиц. Я в первом посте спрашивал "если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным" и мне ответили что ДА, но тут-то получается, что составной ключ из таблицы ТочкиПродукты не входит в состав других таблиц как составной, а входит по частям.
И какая тут связь получается между таблицами, 1-1 или много-1 ?
я не знаю как там у вас именно получилось, т.к. не могу понять смысл " я сделал таблицу "точки" в которой первичный ключ="id_point" и таблицу "продукты" в которой первичный ключ = составной ключ "id_point"+"type_product", и ключ "id_point" из первой таблицы связан с ключем "id_point" из второй таблицы ", поэтому написал как примерно это может выглядеть
Таблицы Точки, ТипыПродуктов и Продукты имеют РК из одного столбца, который мигрировал в таблицу ТочкиПродукты. Про какой составной мигрирующий ключ вы тут говорите?
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36655745
bukinator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
StalkerS Про какой составной мигрирующий ключ вы тут говорите?

StalkerSТочки (ID int PK, Название varchar)
ТипыПродуктов (ID int PK, Название varchar)
Продукты (ID int PK, Название varchar, IDТипa int)
ТочкиПродукты (IDТочки, IDПродукта) PK = IDТочки + IDПродукта
Вот тут в таблице ТочкиПродукты ключ составной. Я спрашивал, "если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным"? мне сказали, что обязательно, хотя в вашем примере составной ключ из таблицы ТочкиПродукты не входит в другие таблицы целиком как составной, а входит по частям (в таблицу Точки входит часть IDТочки,в таблицу Продукты входит часть IDПродукта). Хотя в данном случае непонятно, где здесь внешний ключ, или здесь вообще нет внешнего ключа, а таблицы связаны внутренними ключами. Вообще , проблема возникла после того, как я делал схему базы данных в проге DBDesignerFork , и когда я связывал таблицы между собой, эта прога автоматически вставляла весь составной ключ в взаимосвязанные таблицы. вот тут скрин http://s003.radikal.ru/i204/1005/1c/ea6fac252051.png , в таблицу Points автоматически вставилась Products_Points_product_type из таблицы Products_Points после того, как я связал эти 2 таблицы.
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36655943
Вы описываете стандартную реализацию связи 'многие-ко-многим'.
Пользуясь Вашей терминологией:
- Таблица 'Точки' (ID точки (PK), наименование)
- Таблица 'ПродуктыТочки' (ID точки (FK на 'Точки'), ID типа продукта(FK на 'Типы продуктов')) PRIMARY KEY (ID точки, ID типа продукта) - развязочная таблица
- Таблица 'Типы продуктов' (ID типа продукта (PK), наименование)
Ваша ошибка в том, что таблицы 'Точки' и 'Типы продуктов' должны быть родительские, 'ПродуктыТочки' - дочерняя, а на Вашей схеме - изображено как раз наоборот.
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36656027
bukinator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Золотая рыбка
- Таблица 'Точки' (ID точки (PK), наименование)
- Таблица 'ПродуктыТочки' (ID точки (FK на 'Точки'), ID типа продукта(FK на 'Типы продуктов')) PRIMARY KEY (ID точки, ID типа продукта) - развязочная таблица
- Таблица 'Типы продуктов' (ID типа продукта (PK), наименование)а какой тут тип связи получается, 1 ко многим?
и еще может быть в таблице 'Типы продуктов' не так Золотая рыбкаТаблица 'Типы продуктов' (ID типа продукта (PK), наименование)) а вот так Таблица 'Типы продуктов' (ID типа продукта, наименование (PK))) то есть чтобы ключем был не ID типа продукта, а другое поле?
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36656044
bukinator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и есть разница между такой таблицейЗолотая рыбкаТаблица 'ПродуктыТочки' (ID точки (FK на 'Точки'), ID типа продукта(FK на 'Типы продуктов')) PRIMARY KEY (ID точки, ID типа продукта) - развязочная таблица

и такой Золотая рыбкаТаблица 'ПродуктыТочки' (ID_развязки (PRIMARY KEY), ID точки (FK на 'Точки'), ID типа продукта(FK на 'Типы продуктов')) ) - развязочная таблица?
...
Рейтинг: 0 / 0
составной первичный ключ как внешний
    #36656628
Фотография StalkerS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bukinatorВот тут в таблице ТочкиПродукты ключ составной. Я спрашивал, "если первичный ключ первой таблицы является составным, это обязательно, чтобы он как внешний в другой таблице тоже должен быть составным"? мне сказали, что обязательно, хотя в вашем примере составной ключ из таблицы ТочкиПродукты не входит в другие таблицы целиком как составной, а входит по частям (в таблицу Точки входит часть IDТочки,в таблицу Продукты входит часть IDПродукта).
Не составной ключ из таблицы ТочкиПродукты входит по частям в другие таблицы, а РК из других таблиц входит в первичный ключ таблицы ТочкиПродукты.
РК родительской таблицы должен мигрировать полностью в другие таблицы (и не важно, оказывается он там в первичном ключе или нет), другое дело, если вы впихнули в первичный ключ избыточные столбцы (у вас РК был "id_point"+"type_product" ), это ошибка, т.к. id_point уже уникально идентифицирует запись
Связь в ТочкиПродукты многие ко многим

Вообще, если используете искуственный ключ, то именно он должен быть РК и мигрировать должен тоже только он один, никакие другие столбцы к нему не прицепляются
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / составной первичный ключ как внешний
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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