|
|
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Друзья, делаю БД на MSQLServer2012, клиентов в VisualStudio2012. БОльшую часть бизнес-логики хочу реализовать с помощью представлений и хранимых процедур на стороне сервера. В БД есть таблицы отделы и сотрудники. Каждый сотрудник может состоять в 1 или 2ух отделах, но не более. Как "правильно" с практической точки зрения реализовать связи между этими таблицами? Обязательно ли в таком случае организовывать связь многие ко многим через промежуточную таблицу? Или же можно не связывать эти таблицы, вообще, а связывать всякий раз динамически, с помощью представления, когда клиент будет делать запрос? Как-нибудь так: А затем с помощью триггеров контролировать ссылочную целостность. Просто, хочется минимизировать количество таблиц в БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 08:53 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
В физической реляционной модели промежуточная таблица обязательна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 09:14 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Благодарю, обязуюсь более не обижать промежуточные таблицы )) Однако, может подскажете ещё, как "покрасивше" реализовать запрос с промежуточной таблицей (или где почитать об этом)? Пока, только так получается: А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 09:34 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Torrero11Благодарю, обязуюсь более не обижать промежуточные таблицы )) Однако, может подскажете ещё, как "покрасивше" реализовать запрос с промежуточной таблицей (или где почитать об этом)? Пока, только так получается: А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио. Вот эта вот (жирным) непонятно. Приведенный пример (Отдел - ФИО) максимально детальный и совершенно правильный. Если нужна другая ФОРМА ОТОБРАЖЕНИЯ информации (тип заголовок - Отдел, далее перечислены ФИО в нем работающих, потом следующий отдел и т.д.) то это можно корячить на скл, но куда рациональнее решать средствами клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 09:56 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
П-Л, спасибо, значит буду делать списки сотрудников каждого отдела средствами клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 10:25 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Torrero11А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио. Это довольно легко сделать запросом по данной структуре ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 11:39 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Torrero11Друзья, делаю БД на MSQLServer2012, клиентов в VisualStudio2012. БОльшую часть бизнес-логики хочу реализовать с помощью представлений и хранимых процедур на стороне сервера. В БД есть таблицы отделы и сотрудники. Каждый сотрудник может состоять в 1 или 2ух отделах, но не более. Как "правильно" с практической точки зрения реализовать связи между этими таблицами? Обязательно ли в таком случае организовывать связь многие ко многим через промежуточную таблицу? Или же можно не связывать эти таблицы, вообще, а связывать всякий раз динамически, с помощью представления, когда клиент будет делать запрос? Как-нибудь так: А затем с помощью триггеров контролировать ссылочную целостность. Просто, хочется минимизировать количество таблиц в БД. Разумеется, связь - это не сущность. Но Вы используете РСХОД, а не СУБД, и приходится использовать таблицу для моделирования связи. Причем, лучше делать такую таблицу для связей любой мощности, а не только для М:М. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 11:56 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 11:59 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Torrero11, Вы используете РСУБД - СУБД второго поколения. Хотя некоторые МУМПСисты могут пытаться одурачивать на этот счет, поскоку МУМПС не СУБД вообщи никакого поколения, а всего лишь перманентный ЯП. А если и СУБД не СУБД, то и МУМПС им вроде как ровня. Типа разводка маркетологическая для начинающих. Хотя таблицу, скорей всего, лучше интерпретировать как связь. Но в ней информация о том кто с кем связан. Потому "динамические связывания всякий раз..." и тому подобное - это попытка хранить данную информацию каким-то левым по отношению реляционным способом: последний ориентирован на хранение инфы в таблицах. И на этот способ хранения заточенная мощная система запросов у данной МД. Отказ от этого, скорее всего, ухудшит МД и приведет к снижению преимуществ системы запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 12:12 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
В БД есть таблицы отделы и сотрудники. Каждый сотрудник может состоять в 1 или 2ух отделах, но не более. Как бы нельзя быть немножно беременной. Либо 0, либо 1, всё, что больше -- много. Надо делать таблицу. Если ты её не сделаешь -- у тебя в таблице будет нарушение 1НФ, что вообще фатальная ситуация. Так что делай, а когда у тебя вдруг окажется, что какой-то сотрудник должен в 3-х отделах работать, совершенно внезапно, твоя БД и это сможет хранить. Как "правильно" с практической точки зрения реализовать связи между этими таблицами? Обязательно ли в таком случае организовывать связь многие ко многим через промежуточную таблицу? Ещё раз, связи либо 1:0..1, либо 1:M, либо M:N (многие ко многим). 1:0..1, либо 1:M -- это ссылка из одной таблицы на другую, поле в дочерней таблице. M:N (многие ко многим) -- промежуточная таблица. Третьего не существует. Или же можно не связывать эти таблицы, вообще, а связывать всякий раз динамически, с помощью представления, когда клиент будет делать запрос? А затем с помощью триггеров контролировать ссылочную целостность. Этот бред я не понял. Просто, хочется минимизировать количество таблиц в БД. Это самая глупая идея, которая только может прийти в голову проектировщику БД -- экономить таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 13:06 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Однако, может подскажете ещё, как "покрасивше" реализовать запрос с промежуточной таблицей (или где почитать об этом)? Пока, только так получается: Я не понял, где запрос ? И чем он тебе не нравится -- не забудь добавить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 13:07 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Torrero11А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио. Это нарушение 1НФ, тяжкий грех для любого разработчика РБД. А как раз что строки с сотрудником повторяются -- правильно. Если тебе не нравится -- можешь вывести отделы сотрудников отдельным набором данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 13:09 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинTorrero11А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио. Это довольно легко сделать запросом по данной структуре Это не нужно делать запросом. Это -- самое главное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 13:10 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Друзья, спасибо за исчерпывающие ответы! Осознал, исправлюсь. MasterZivTorrero11А хотелось бы, чтобы значения не повторялись и было 3 столбца: Отдел1, Отдел2, Фио. Это нарушение 1НФ, тяжкий грех для любого разработчика РБД. А как раз что строки с сотрудником повторяются -- правильно. Если тебе не нравится -- можешь вывести отделы сотрудников отдельным набором данных. Уважаемый MasterZiv, отделы сотрудников отдельным набором данных следует делать на клиентской стороне? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 13:30 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Хотелось бы максимум функционала на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 13:31 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Torrero11Уважаемый MasterZiv, отделы сотрудников отдельным набором данных следует делать на клиентской стороне?Смайлик с выпученными глазами: Запрос включает 3 таблицы. Получается набор данных со сведенями и о каждом человеке и о каждом отделе. Можно задать серверу отдел и получить только тех людей, что в нем работают, можно, наоборот, задав человек, получить в каких он отделах работал. А что вы имеете в виду ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 13:53 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
MasterZivКот Матроскинпропущено... Это довольно легко сделать запросом по данной структуре Это не нужно делать запросом. Это -- самое главное. А как же это надо делать, если не запросом ? :) P.S. Ох, чувствую, будет веселье по случаю пятницы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 13:53 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
П-ЛTorrero11Уважаемый MasterZiv, отделы сотрудников отдельным набором данных следует делать на клиентской стороне?Смайлик с выпученными глазами: Запрос включает 3 таблицы. Получается набор данных со сведенями и о каждом человеке и о каждом отделе. Можно задать серверу отдел и получить только тех людей, что в нем работают, можно, наоборот, задав человек, получить в каких он отделах работал. А что вы имеете в виду ??? П-Л, собственно, это я и имел в виду, вопрос закрыт. С помощью параметризованной хранимой функции, клиент будет запрашивать у сервера либо список членов заданного отдела, либо список отделов заданного сотрудника. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 14:26 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Torrero11 отделы сотрудников отдельным набором данных следует делать на клиентской стороне? Да как хочешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 17:01 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
Кот МатроскинЭто не нужно делать запросом. Это -- самое главное. А как же это надо делать, если не запросом ? :) Давай вернёмся к началу, будем плясать от печки. ЧТО нам нужно сделать, сформулируй полностью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 17:55 |
|
||
|
Реализация связей М:М. Как избавиться от промежуточных таблиц?
|
|||
|---|---|---|---|
|
#18+
MasterZivЧТО нам нужно сделать, сформулируй полностью. судя по 14138645 , нам нужно получить Resultset ( для отчета, грида, etc. - неважно) вида "Сотрудник, Отдел1, Отдел2". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.04.2013, 18:52 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=38214780&tid=1541309]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 245ms |
| total: | 384ms |

| 0 / 0 |
