powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реализация связей М:М. Как избавиться от промежуточных таблиц?
21 сообщений из 21, страница 1 из 1
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38213877
Torrero11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, делаю БД на MSQLServer2012, клиентов в VisualStudio2012. БОльшую часть бизнес-логики хочу реализовать с помощью представлений и хранимых процедур на стороне сервера. В БД есть таблицы отделы и сотрудники. Каждый сотрудник может состоять в 1 или 2ух отделах, но не более.
Как "правильно" с практической точки зрения реализовать связи между этими таблицами? Обязательно ли в таком случае организовывать связь многие ко многим через промежуточную таблицу?

Или же можно не связывать эти таблицы, вообще, а связывать всякий раз динамически, с помощью представления, когда клиент будет делать запрос? Как-нибудь так:

А затем с помощью триггеров контролировать ссылочную целостность.
Просто, хочется минимизировать количество таблиц в БД.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38213896
В физической реляционной модели промежуточная таблица обязательна.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38213908
Torrero11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Благодарю, обязуюсь более не обижать промежуточные таблицы ))
Однако, может подскажете ещё, как "покрасивше" реализовать запрос с промежуточной таблицей (или где почитать об этом)?
Пока, только так получается:

А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38213929
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Torrero11Благодарю, обязуюсь более не обижать промежуточные таблицы ))
Однако, может подскажете ещё, как "покрасивше" реализовать запрос с промежуточной таблицей (или где почитать об этом)?
Пока, только так получается:

А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио.
Вот эта вот (жирным) непонятно. Приведенный пример (Отдел - ФИО) максимально детальный и совершенно правильный. Если нужна другая ФОРМА ОТОБРАЖЕНИЯ информации (тип заголовок - Отдел, далее перечислены ФИО в нем работающих, потом следующий отдел и т.д.) то это можно корячить на скл, но куда рациональнее решать средствами клиента.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38213972
Torrero11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П-Л, спасибо, значит буду делать списки сотрудников каждого отдела средствами клиента.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214111
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Torrero11А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио.

Это довольно легко сделать запросом по данной структуре
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214148
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Torrero11Друзья, делаю БД на MSQLServer2012, клиентов в VisualStudio2012. БОльшую часть бизнес-логики хочу реализовать с помощью представлений и хранимых процедур на стороне сервера. В БД есть таблицы отделы и сотрудники. Каждый сотрудник может состоять в 1 или 2ух отделах, но не более.
Как "правильно" с практической точки зрения реализовать связи между этими таблицами? Обязательно ли в таком случае организовывать связь многие ко многим через промежуточную таблицу?

Или же можно не связывать эти таблицы, вообще, а связывать всякий раз динамически, с помощью представления, когда клиент будет делать запрос? Как-нибудь так:

А затем с помощью триггеров контролировать ссылочную целостность.
Просто, хочется минимизировать количество таблиц в БД.
Разумеется, связь - это не сущность. Но Вы используете РСХОД, а не СУБД, и приходится использовать таблицу для моделирования связи. Причем, лучше делать такую таблицу для связей любой мощности, а не только для М:М.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214152
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214174
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Torrero11,

Вы используете РСУБД - СУБД второго поколения. Хотя некоторые МУМПСисты могут пытаться одурачивать на этот счет, поскоку МУМПС не СУБД вообщи никакого поколения, а всего лишь перманентный ЯП. А если и СУБД не СУБД, то и МУМПС им вроде как ровня. Типа разводка маркетологическая для начинающих.

Хотя таблицу, скорей всего, лучше интерпретировать как связь. Но в ней информация о том кто с кем связан. Потому "динамические связывания всякий раз..." и тому подобное - это попытка хранить данную информацию каким-то левым по отношению реляционным способом: последний ориентирован на хранение инфы в таблицах. И на этот способ хранения заточенная мощная система запросов у данной МД.
Отказ от этого, скорее всего, ухудшит МД и приведет к снижению преимуществ системы запросов.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214270
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В БД есть таблицы отделы и сотрудники. Каждый сотрудник может состоять в 1 или 2ух отделах, но не более.

Как бы нельзя быть немножно беременной. Либо 0, либо 1, всё, что больше -- много.
Надо делать таблицу. Если ты её не сделаешь -- у тебя в таблице будет нарушение 1НФ, что вообще фатальная ситуация.
Так что делай, а когда у тебя вдруг окажется, что какой-то сотрудник должен в 3-х отделах работать, совершенно внезапно,
твоя БД и это сможет хранить.

Как "правильно" с практической точки зрения реализовать связи между этими таблицами? Обязательно ли в таком случае организовывать связь многие ко многим через промежуточную таблицу?

Ещё раз, связи либо 1:0..1, либо 1:M, либо M:N (многие ко многим).

1:0..1, либо 1:M -- это ссылка из одной таблицы на другую, поле в дочерней таблице.
M:N (многие ко многим) -- промежуточная таблица.
Третьего не существует.

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

Этот бред я не понял.

Просто, хочется минимизировать количество таблиц в БД.

Это самая глупая идея, которая только может прийти в голову проектировщику БД -- экономить таблицы.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214272
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако, может подскажете ещё, как "покрасивше" реализовать запрос с промежуточной таблицей (или где почитать об этом)?
Пока, только так получается:


Я не понял, где запрос ?
И чем он тебе не нравится -- не забудь добавить.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214276
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Torrero11А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио.

Это нарушение 1НФ, тяжкий грех для любого разработчика РБД.
А как раз что строки с сотрудником повторяются -- правильно.
Если тебе не нравится -- можешь вывести отделы сотрудников отдельным набором данных.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214280
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинTorrero11А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио.

Это довольно легко сделать запросом по данной структуре

Это не нужно делать запросом. Это -- самое главное.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214330
Torrero11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья, спасибо за исчерпывающие ответы!
Осознал, исправлюсь.
MasterZivTorrero11А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио.

Это нарушение 1НФ, тяжкий грех для любого разработчика РБД.
А как раз что строки с сотрудником повторяются -- правильно.
Если тебе не нравится -- можешь вывести отделы сотрудников отдельным набором данных.

Уважаемый MasterZiv, отделы сотрудников отдельным набором данных следует делать на клиентской стороне?
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214332
Torrero11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хотелось бы максимум функционала на сервере.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214376
П-Л
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Torrero11Уважаемый MasterZiv, отделы сотрудников отдельным набором данных следует делать на клиентской стороне?Смайлик с выпученными глазами:
Запрос включает 3 таблицы. Получается набор данных со сведенями и о каждом человеке и о каждом отделе. Можно задать серверу отдел и получить только тех людей, что в нем работают, можно, наоборот, задав человек, получить в каких он отделах работал.

А что вы имеете в виду ???
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214377
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКот Матроскинпропущено...


Это довольно легко сделать запросом по данной структуре

Это не нужно делать запросом. Это -- самое главное.

А как же это надо делать, если не запросом ? :)

P.S. Ох, чувствую, будет веселье по случаю пятницы
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214440
Torrero11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
П-ЛTorrero11Уважаемый MasterZiv, отделы сотрудников отдельным набором данных следует делать на клиентской стороне?Смайлик с выпученными глазами:
Запрос включает 3 таблицы. Получается набор данных со сведенями и о каждом человеке и о каждом отделе. Можно задать серверу отдел и получить только тех людей, что в нем работают, можно, наоборот, задав человек, получить в каких он отделах работал.

А что вы имеете в виду ???
П-Л, собственно, это я и имел в виду, вопрос закрыт. С помощью параметризованной хранимой функции, клиент будет запрашивать у сервера либо список членов заданного отдела, либо список отделов заданного сотрудника.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214780
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Torrero11 отделы сотрудников отдельным набором данных следует делать на клиентской стороне?

Да как хочешь.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38214911
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинЭто не нужно делать запросом. Это -- самое главное.
А как же это надо делать, если не запросом ? :)


Давай вернёмся к началу, будем плясать от печки.

ЧТО нам нужно сделать, сформулируй полностью.
...
Рейтинг: 0 / 0
Реализация связей М:М. Как избавиться от промежуточных таблиц?
    #38215032
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivЧТО нам нужно сделать, сформулируй полностью.

судя по 14138645 , нам нужно получить Resultset ( для отчета, грида, etc. - неважно) вида "Сотрудник, Отдел1, Отдел2".
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Реализация связей М:М. Как избавиться от промежуточных таблиц?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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