Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2022, 08:21   #1
kefirko
Новичок
Джуниор
 
Регистрация: 24.04.2022
Сообщений: 2
По умолчанию SQL запрос многие ко многим с одной таблицей связей на всю БД

Добрый день. Уже месяц ищу ответ на свой вопрос. Везде написано как поженить 2 таблицы (и с этим проблем нет), а вот про три и более информации найти не могу. Причем ключевой момент это одна таблица связей на всю БД.
1. Возможна ли такая реализация?
2. Чем она плоха? Т.к. если бы была хороша, то ее тиражировали бы налево и направо, и на каждом углу советовали, а этого не наблюдается. Значит есть проблема.
В качестве примера 3 таблицы. Книга, Автор, Пиво. Связи Книга-Автор и Автор-Пиво.
Код:
CREATE TABLE [authors] (
	[id] Long NOT NULL IDENTITY(1,1) PRIMARY KEY, 
	[name] VarChar(255) NOT NULL
)
Код:
CREATE TABLE [books] (
	[id] Long NOT NULL IDENTITY(1,1) PRIMARY KEY, 
	[name] VarChar(255) NOT NULL
)
Код:
CREATE TABLE [beers] (
	[id] Long NOT NULL IDENTITY(1,1) PRIMARY KEY, 
	[name] VarChar(255) NOT NULL
)
Код:
CREATE TABLE [links] (
	[id] Long NOT NULL IDENTITY(1,1) PRIMARY KEY, 
	[authoriD] Long DEFAULT 0, 
	[bookID] Long DEFAULT 0, 
	[beerID] Long DEFAULT 0
)
Вроде такой вариант кажется удачным в плане отсутствия кучи таблиц связей. Женятся также по 2 таблицы как обычно, лишние данные заполняются нулями. При желании можно в каждой таблице завести одну мусорную строку и в таблице связей ставить ее по умолчанию. Тогда можно обойтись без поля ID, а сделать как положено:
Код:
CONSTRAINT PK PRIMARY KEY (authoriD,bookID,beerID)
kefirko вне форума Ответить с цитированием
Старый 24.04.2022, 10:54   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Чем она плоха? Т.к. если бы была хороша,
Цитата:
лишние данные заполняются нулями
реальные связи осуществляются по ИНДЕКСАМ таблиц.
А множественные пустые индексные поля создают РАЗДУТЫЕ и малоэффективные индексы.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 25.04.2022, 17:36   #3
kefirko
Новичок
Джуниор
 
Регистрация: 24.04.2022
Сообщений: 2
По умолчанию

Ну тогда вариант2. Такая таблица:
Код:
CREATE TABLE [links] (
	[table1] varchar not null, 
	[id1] Long not null, 
	[table2] varchar not null,
	[id2] Long not null 
)
Где table1 - таблица А, table2 - таблица Б (типа по алфавиту для однозначной идентификации).
Целостность бд контролировать не требуется.
Ну и про производительность и прочее: 300 таблиц по 1000 записей в каждой. Это не так уж и много. Но вот городить кучу таблиц связей не хочется.

Последний раз редактировалось kefirko; 25.04.2022 в 17:48. Причина: add2
kefirko вне форума Ответить с цитированием
Старый 26.04.2022, 09:27   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Но вот городить кучу таблиц связей не хочется.
окромя возможной неэффективной работы ничто не мешает.

ну разве еще вероятность по прошествии времени запутаться
допустить ошибки
- при реорганизации
- при "ручной" корректировке
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 26.04.2022 в 09:30.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MySQL, связь многие-ко-многим. SQL запрос. PROkaZZZniK SQL, базы данных 23 05.06.2013 00:06
Связь многие-ко-многим Аллен SQL, базы данных 1 05.11.2012 18:17
Связь многие ко многим %$PROregRAMi$t% Microsoft Office Access 9 11.06.2011 23:30
Запрос из нескольких таблиц (отношение многие-ко-многим) Машуля SQL, базы данных 6 28.03.2010 09:51
Многие ко многим ("")(Э_Є)("") БД в Delphi 1 12.03.2009 01:18