powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Отношение многие ко многим в одной таблице!
11 сообщений из 11, страница 1 из 1
Отношение многие ко многим в одной таблице!
    #35370606
Добрый день. У меня возник такой вопрос - есть таблица групп TGroups в которой есть теже поля, что и в таблице TUsers. Но в таблице TUsers есть еще и другие поля, присущи только сущности Users. Эти две сущности (группы и пользователи) связаны между собой отношением многие ко многим. И на данный момент есть два способоа реализовать эту связь в базе данных -

создать универсальную таблицу, в которой были бы поля группы и пользователя и добавить туда флажок isGroup. Также нужно будет добавить еще одну таблицу с двумя ключами UserId и GroupId, которая поможет реализовать связь многие ко многим. (dbschema1.jpg)

И есть другой подход - создать три таблицы TUsers, TGroups и связующую TUsersToGroups. (dbschema2.jpg)

Какой подход лучше? Есть ли отличия по производительности?

Заранее благодарю.
...
Рейтинг: 0 / 0
Отношение многие ко многим в одной таблице!
    #35370623
edges7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Косогор Павел ... есть таблица групп TGroups в которой есть теже поля, что и в таблице TUsers...

И какой смысл хранить в этих двух таблицах одну и ту же информацию? В "Users" - информация о пользователях, в "Groups" - код группы, код пользователя ( ну возможно еще какие-нибудь необходимые поля; например locked - это на тот случай если у вас появится желание заблокировать всю группу :) и т.д. ).
...
Рейтинг: 0 / 0
Отношение многие ко многим в одной таблице!
    #35370640
К примеру удобно обрабатывать сущности User и Group как одну, используя только их общие поля, а когда понадобиться по флагу isGroup определить это пользователь, если да, то знач можно использовать остальные поля в таблице.
...
Рейтинг: 0 / 0
Отношение многие ко многим в одной таблице!
    #35371254
Фотография bastrakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
стандартным и более понятным считается второй способ.
в первом будет выигрыш по скорости на групповых операциях, если это операции общие без построения именно связей.
если надо будет строить связи и делать что-то в зависимости от попадания юзера в группу - выигрыша не будет. а вот худшая читабельность (и увеличение ошибок при реализации) - точно будут.
во
...
Рейтинг: 0 / 0
Отношение многие ко многим в одной таблице!
    #35371308
а что насчет экономии места на диске? какой случай лучше?
...
Рейтинг: 0 / 0
Отношение многие ко многим в одной таблице!
    #35371361
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>> а что насчет экономии места на диске? какой случай лучше?
Ты скажи сразу, сколько у тебя пользователей, и какой диск, а мы уж тут
придумаем чего-нить... :-)


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отношение многие ко многим в одной таблице!
    #35371464
Пользователей больше 100000, диск большой, но заказчики жмут место ;)
...
Рейтинг: 0 / 0
Отношение многие ко многим в одной таблице!
    #35371531
edges7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
edges7 В "Users" - информация о пользователях, в "Groups" - код группы, код пользователя ( ну возможно еще какие-нибудь необходимые поля; например locked - это на тот случай если у вас появится желание заблокировать всю группу :) и т.д. ).

Чего-то я здесь загнул. :) Короче, на ночь вредно давать советы. А то кошмары приснятся :)
В "Users" - информация о пользователях, в "Groups" - информация о группах ( код группы, наименование группы и т.д. ). Также добавляем таблицу типа "User_Group" - код группы, код пользователя ( возможны и другие поля ). В общем все это похоже на ваш второй вариант.
...
Рейтинг: 0 / 0
Отношение многие ко многим в одной таблице!
    #35371609
Фотография bastrakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Косогор Павела что насчет экономии места на диске? какой случай лучше?

зависит от базы, но чисто интуитивно, второй вариант экономичнее за счет таблицы связей.
дефрагментировать 3 таблицы легче, чем 1 большую.
...и сегментировать легче, если у вас количество юзеров зашкалит.
но я думаю вы не в китае. :-)
во
...
Рейтинг: 0 / 0
Отношение многие ко многим в одной таблице!
    #35371775
Kirill Razuvaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Косогор ПавелПользователей больше 100000, диск большой, но заказчики жмут место ;)
Кхм... а мне казалось, что этим обычно программисты занимаются.. :-)
А если серьезно - едва ли на различиях вариантов реализации много места выиграется.
...
Рейтинг: 0 / 0
Отношение многие ко многим в одной таблице!
    #35372109
Фотография bastrakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
могу рассказать, как на различиях реализации место теряется.
если например сохранять в базу состояния разных обьектов в xml-формате. :-)
"...а вдруг юзер захочет вернутся к своему процессу через 3 года?!.."
растет как на дрожжжжжжжах!

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


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