powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / многозначные связи (M:N)
14 сообщений из 14, страница 1 из 1
многозначные связи (M:N)
    #39089300
funch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здравствуйте,

я новичок и у меня возник вопрос.

Для N:M связей нужна промежуточная таблица. Например связь между таблицей "клиент" и таблицей "фирма" М:N. Создается промежуточная таблица "товар". Первичный ключ в промежуточной таблице - это сочетание внешних ключей первых двух таблиц.

Можно ли сохранять помимо внешних ключей первых двух таблиц, еще и запись из них. Скажем с таблица клиент переносится в таблицу товар внешний ключ и имя клиента... Скажите это технически неправильно или все таки тут разницы особой нет?
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089309
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funch, без проблем.
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089351
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funchМожно ли сохранять помимо внешних ключей первых двух таблиц, еще и запись из них. Скажем с таблица клиент переносится в таблицу товар внешний ключ и имя клиента...Я вообще не понял эту формулировку.
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089359
funch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,

сохранять в промежуточную таблицу (товар) внешние ключи от участвующих в связи таблиц (клиент, фирма), а так же и другие записи от таблиц клиент и фирма. Например имена клиентов с таблицы "клиент" хранятся так же в таблице "товар".

Не знаю понятно ли объяснил в этот раз....
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089364
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funch, да вы вместо объяснений приведите ему простейший пример, он и поймет.
У нас тут на форуме проще всего приводить примеры типа таких.

Код: sql
1.
2.
3.
4.
5.
6.
7.
create table ware (wareId int, wareTit text);
create table user (userId int, userTit text);
create table map(userId int, wareId int);

select * from user
    join map using (userId)
    join ware using (wareId);
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089370
funch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumix,

спасибо за совет ))

тогда если на этом примере, что то вроде этого...

Код: sql
1.
2.
3.
4.
5.
6.
7.
create table ware (wareId int, wareTit text);
create table user (userId int, userTit text);
create table map(userId int, wareId int, userTit text, wareTit text);

select * from user
    join map using (userId)
    join ware using (wareId);
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089373
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funch, да, это возможно, только это лишние телодвижения, потому что с добавленными вами полями в таблицу map

1) select * перестанет работать, потому что не будет знать какой именно userTit брать и вам придется
а) либо вручную перечислять поля
б) либо в таблице map дать другие названия типа mapUserTit, mapWareTit

2) select который я вам дал уже содержит в себе поля userTit и wareTit, поэтому вам рекомендуется сильно задуматься действительно ли вам так важны эти доп.поля в таблице map

но если вдруг они действительно важны, то sql этого не запрещает
лишь бы в этом был смысл
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089377
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funch
Код: sql
1.
create table map(userId int, wareId int, userTit text, wareTit text);

Вот теперь понял :)

Да, так делать можно. Правда, не то чтобы совсем без проблем (если речь о хранении текущих названий, а не исторических), но можно.

В моей практике такое обычно бывает, когда нужно сохранить исторические данные. Например, как именно назывался товар и как именно назывался клиент во время выполнения заказа.
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089381
funch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Lumix,

Спасибо вам большое за ответ.
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089384
funch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
Спасибо )))
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089411
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funchВсем здравствуйте,

я новичок и у меня возник вопрос.

Для N:M связей нужна промежуточная таблица. Например связь между таблицей "клиент" и таблицей "фирма" М:N. Создается промежуточная таблица "товар". Первичный ключ в промежуточной таблице - это сочетание внешних ключей первых двух таблиц.

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

>> Скажите это технически неправильно или все таки тут разницы особой нет?

Разница есть. Без понимания зачем -- так не делайте.

Если озвучите причину сего действа -- можно будет обсудить
правильно-неправильно.
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089596
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funchМожно ли сохранять помимо внешних ключей первых двух таблиц, еще и запись из них. Скажем с таблица клиент переносится в таблицу товар внешний ключ и имя клиента...

Можно. Называется "денормализация".

funchСкажите это технически неправильно или все таки тут разницы особой нет?


Это технически неправильно .
Кроме того, это и не нужно , всё что тут экономится -- один JOIN по ключу. Это копейки.
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089598
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lumixfunch, да, это возможно, только это лишние телодвижения, потому что с добавленными вами полями в таблицу map

1) select * перестанет работать, потому что не будет знать какой именно userTit брать и вам придется



Нашёл, тоже мне, проблему...
...
Рейтинг: 0 / 0
многозначные связи (M:N)
    #39089600
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
javajdbcfunchВсем здравствуйте,

я новичок и у меня возник вопрос.

Для N:M связей нужна промежуточная таблица. Например связь между таблицей "клиент" и таблицей "фирма" М:N. Создается промежуточная таблица "товар". Первичный ключ в промежуточной таблице - это сочетание внешних ключей первых двух таблиц.

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

>> Скажите это технически неправильно или все таки тут разницы особой нет?

Разница есть. Без понимания зачем -- так не делайте.

Если озвучите причину сего действа -- можно будет обсудить
правильно-неправильно.


А не должно уже быть причин так делать. 5.7 -- и все дела...
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / многозначные связи (M:N)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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