[БД] Одна или несколько таблиц для списка пользователей?

Corrector

Имеется некоторый сайт. Есть список пользователей, которые могут залогинится.
Специфика сайта такова, что разные группы пользователей имеют разный набор параметров (полей в таблицах)
Как лучше сделать: по одной таблице для каждой круппы пользователей или сделать одну большую таблицу с избыточном количеством полей (при этом >50% таблицы будет незаполнена)?

kruzer25

> сделать одну большую таблицу с избыточном количеством полей
---
Q46: да ну?
A46: ну да.

shlyumper

три таблицы:
1) id - пользователь - формальное описание пользователя
2) id - группа - формальное описание группы
3) id - user_id - group_id
кол-во записей в таблице 3 с одинаковыми user_id равно кол-ву групп, в которых состоит данный пользователь.

Corrector

если это какой-то FAQ, можешь дать ссылку? ЗЫ: пока нет инета.
, спасибо за ценный совет.

sergei1969

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

Corrector

набор свойств изменяться не будет
4 группы пользователей.

Hastya

Это немного похоже на ORM-отображение наследования.
В случае с одной таблицей проще делать выборки, но сложно "разделить" группы с помощью constraint-ов БД. В случае нескольких таблиц каждая может жить своей собственной жизнью, например можно отдельно для специфической группы пользователей (таблицы) сделать какие-то реляционные связи.

6yrop

вариантов несколько
- отдельная таблица на каждый тип
- общие данные (логин, пароль) в одной таблице, под специфические данные для каждого класса своя таблица
- 2 таблицы. в одной общие данные, в другой записи вида <свойство> - <значение> со сылкой на первую
- одна большая таблица
В большинстве проектов надо использовать 2-ой вариант. Его главное достоинство -- прозрачность схемы, т.е. меньше условностей (рисовали типа ERWin, Visio разруливают "наследование" именно по этому варианту). Недостаток: возможно небольшая потеря в производительности при некоторых видах запросов (это надо смотреть более детально). Больше недостатков я не вижу, см. ниже.
- 2 таблицы. в одной общие данные, в другой записи вида <свойство> - <значение> со сылкой на первую
почему вы боитесь делать create/alter table "на лету"?
Обычные горизонтальные таблички удобнее для sql-запросов.
сколько различных групп,
какая разница?

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

Hastya

делать одну вьюшку это так сложно?
Тут вьюшка не поможет, ибо что у тебя будет PK? и нагрузка на базу больше.

6yrop

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