Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Виды пользователей и количество таблиц. / 15 сообщений из 15, страница 1 из 1
13.11.2008, 21:44
    #35653030
alver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
Итак Здравстуйте всем!!
Суть проблемы:
Есть 5(может больше, может меньше, не суть) типов пользователей. Причём абсолютно разных, т.е. существующие поля у одного типа не существуют у другого. Соответственно использовать для всех типов одну таблицу не целесообразно по моему (или нет?). Ведь поля, которые будут заполнены у одного типа, останутся пустыми у другого.
Вопрос:
Что собственно делать??
Размышления:
Если разнести пользователей по разным таблицам, то даже не считая траблов с добавлением нового типа пользователя (придётся создавать новую таблицу, а уж что там будет в php коде и думать боюсь) проблем будет навалом. Например пользователи могут общаться между собой по средствам сообщений. Хм, как же это реализовать??!! Ведь у каждой таблицы с типом юзера будет своё независимое поле id. => не сможем связать таблицу с сообщениями и таблицу с юзерами. Или как вывести всех пользователей разом(разумеется можно, но уж очень геморно).
Кто поможет?))
...
Рейтинг: 0 / 0
13.11.2008, 22:51
    #35653101
Кифирчик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
USERS
-user_id
-user_name
-user_type

USERS_TYPE1_INFO
-user_id
-ICQ
-e_mail

USERS_TYPE2_INFO
-user_id
-zip_code
-home_tel
-mobile_tel

так можно и сообщения друг другу писать, и связывать...
вот только геморно добавлять типы...
можно по другому
USERS - список пользователей
-user_id
-user_name
-type_id

USERS_INFO - информация о пользователях
-user_id
-field1 (varchar)
-field2..
-field3..
...
-field10 (смотря сколько может быть свойств у пользвателя)
и
USERS_TYPE - описание типов пользователей, и полей для этого типа в тбл USERS_INFO
type_id
type_name
field1_name
field2_name
...
field10_name
...
Рейтинг: 0 / 0
13.11.2008, 23:47
    #35653170
alver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
КифирчикUSERS
-user_id
-user_name
-user_type

USERS_TYPE1_INFO
-user_id
-ICQ
-e_mail

USERS_TYPE2_INFO
-user_id
-zip_code
-home_tel
-mobile_tel

так можно и сообщения друг другу писать, и связывать...
вот только геморно добавлять типы...
можно по другому
USERS - список пользователей
-user_id
-user_name
-type_id

USERS_INFO - информация о пользователях
-user_id
-field1 (varchar)
-field2..
-field3..
...
-field10 (смотря сколько может быть свойств у пользвателя)
и
USERS_TYPE - описание типов пользователей, и полей для этого типа в тбл USERS_INFO
type_id
type_name
field1_name
field2_name
...
field10_name
Тяк...)
user_id в таблицах типов пользователей в первом варианте я так понимаю внешние ключи, мда?)
Второй вариант мне кажется не целесообразным. Ведь в таблице USERS_INFO будут пустые поля. Оно конечно лучше, чем одна большая, но просто, к примеру конкретно у меня есть тип юзера "клиент" у которого есть около 20 полей(его контактная инфа), которые есть тока у него. И эти 20 полей для остальных 4 типов будут как бы ничем) Это конечно может и нормально, просто мне вот интересно, какой тут оптимальный подход.
...
Рейтинг: 0 / 0
14.11.2008, 11:31
    #35653842
Bely
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
alver,
В добавлении к Кефирчику, почитайте тут
...
Рейтинг: 0 / 0
14.11.2008, 12:27
    #35654041
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
1. а зачем users и users_info разносить, ведь все равно отношение 1 к 1.
2. ну будут пустые поля и что?пасите тип пользователя и в триггере проверяйте все ли поля для данного типа заполнены,а при смене типа в этом же триггере чистите ненужные поля.
...
Рейтинг: 0 / 0
14.11.2008, 14:49
    #35654552
olzhas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
Если пользователи имеют разные атрибуты(при чем не в значении, а самом типе атрибуте), то это уже разные сущности. И хранить их нужно в разных таблицах(как описал кефирчик в первом варианте).

alverто даже не считая траблов с добавлением нового типа пользователя (придётся создавать новую таблицу, а уж что там будет в php коде и думать боюсь)
Автоматизировать нужно не хранение, а представление.

p.s. похоже на спор "Хранить ли все справочники в одной таблице"
...
Рейтинг: 0 / 0
14.11.2008, 15:18
    #35654661
Bely
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
Shtock1. а зачем users и users_info разносить, ведь все равно отношение 1 к 1. Не 1 к 1, а 1 к 0..1
Разница существенная в структуре.

Shtock2. ну будут пустые поля и что?пасите тип пользователя и в триггере проверяйте все ли поля для данного типа заполнены,а при смене типа в этом же триггере чистите ненужные поля.Нормализация данных, однако.
...
Рейтинг: 0 / 0
14.11.2008, 16:16
    #35654887
alver
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
Никакого спора нет)
Просто я хочу узнать мнение более опытных юзверей чем я по этому вопросу)
...
Рейтинг: 0 / 0
14.11.2008, 16:51
    #35655021
Shtock
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
Нормализация не должна увеличивать геморой по разработке. Так сказать любой документированный баг - не баг.
...
Рейтинг: 0 / 0
14.11.2008, 17:17
    #35655102
Bely
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
ShtockНормализация не должна увеличивать геморой по разработке. Так сказать любой документированный баг - не баг.Не вижу гемороя.
Если есть два вида пользователей: физ лицо, юр лицо
Для одного надо указать: ФИО, телефон, домашний адрес
Для второго: Название организации, ИНН, Юр адрес, ОКОНХ, ОКПО
зачем это все хранить в одной таблице?
Это даже вводиться будет в разных формах.
...
Рейтинг: 0 / 0
14.11.2008, 19:42
    #35655390
Kirill Razuvaev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
>> Если есть два вида пользователей: физ лицо, юр лицо
>> зачем это все хранить в одной таблице?
>> Это даже вводиться будет в разных формах.
А как на счет того, что контрагентом (покупателем, к примеру) может быть и
физическое, и юридическое лицо?
Будем плодить дополнительный флаг "тип контрагента" в "Заказах"?
Если у человека речь идет о пользователях, то это гораздо более однородный
объект, т.е. по сути любой метод (свойство) может относиться к любому
пользователю, к тому же ТИП пользователя изменяться может.

P.S. Что страшного в пустых полях? Все нормальные СУБД успешно с этим
справляются. А чтобы программеру творить удобней было - представления
существуют...


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
14.11.2008, 23:02
    #35655598
korda
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
Kirill Razuvaev
P.S. Что страшного в пустых полях? Все нормальные СУБД успешно с этим
справляются. А чтобы программеру творить удобней было - представления
существуют...


Ну, так это снова вопрос из темы хранить ли все справочники в одной таблице. Вроде, как разрешили его, нет?
Здесь микродискуссия, хорошо демонстрирующая отрицательные стороны этого дела.
А представления, конечно, могут скрыть денормализованную структуру БД и представить её в наилучшем виде, но их сила, скорее, в обратном, - в возможности связывать таблицы между собой пред непосредственной выдачей результата клиенту. Вот в представлениях наличие пустых полей более "легитимно", чем в таблицах.
...
Рейтинг: 0 / 0
17.11.2008, 11:26
    #35657320
Bely
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
Kirill RazuvaevА как на счет того, что контрагентом (покупателем, к примеру) может быть и
физическое, и юридическое лицо?
Будем плодить дополнительный флаг "тип контрагента" в "Заказах"?
Если у человека речь идет о пользователях, то это гораздо более однородный
объект, т.е. по сути любой метод (свойство) может относиться к любому
пользователю, к тому же ТИП пользователя изменяться может.Еще раз перечитайте это .
Если у пользователя изменился тип, то это ДРУГОЙ пользователь.
У Юр-лилица с физ.лицом и Юр.лица-с-Юр-лицом - разные взаимоотношения.
Даже разные законы действуют.

Не надо относиться к типу пользователя как к дополнительному атрибуту вроде "цвет волос", "место работы" - и все станет по другому.

Kirill RazuvaevP.S. Что страшного в пустых полях? Все нормальные СУБД успешно с этим
справляются. А чтобы программеру творить удобней было - представления
существуют... А что в них хорошего? Или программист не может освоить JOIN из двух таблиц и написать необходимые VIEW ?

Предложенная схема - не сложнее одной таблицы, зато намного гибче.
...
Рейтинг: 0 / 0
17.11.2008, 11:37
    #35657360
Mainframe_старый
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
если пользоваатель может быть одновременно двумя и более типами, то ссылка на его таблицы идет в отдельной таблице , а не в таблице пользователей.
...
Рейтинг: 0 / 0
17.11.2008, 13:33
    #35657766
Кифирчик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виды пользователей и количество таблиц.
alver
Тяк...)
user_id в таблицах типов пользователей в первом варианте я так понимаю внешние ключи, мда?)
Второй вариант мне кажется не целесообразным. Ведь в таблице USERS_INFO будут пустые поля. Оно конечно лучше, чем одна большая, но просто, к примеру конкретно у меня есть тип юзера "клиент" у которого есть около 20 полей(его контактная инфа), которые есть тока у него. И эти 20 полей для остальных 4 типов будут как бы ничем) Это конечно может и нормально, просто мне вот интересно, какой тут оптимальный подход.
первый вариант удобен, когда у вас 2...5 типов пользователей, и в процессе жизни ИС они не будут добавляться, ну или крайне редко.
сущность пользователи - одна, одна сплошная нумерация, то есть в дальнейшем, в можете, например, к договру одинаково привязать как физическое лицо, так и юр.лицо.
это раз. во-вторых, в программах, оперируя "пользователями", нас интересуют не их телефоны, а UID, пароли, ник/имя...это всё в USERS... и когда это всё будет отдельно от кучи текстовых полей, проиндексированно - это будет быстрее работать.
понятно, что если в программе вы просматриваете список физ лиц, то таблица users джойница с USERS_TYPE1_INFO (например), а когда список юр лиц, то USERS_TYPE2_INFO. все представления для пользователя через VIEW

для физиков и юриков считаю надо делать также, не 2-мя таблицами а 3-мя... например база по "земельным участкам"... объект права - участок, а субъект права - физик/юрик... договор, аренда привязывается, в первую очередь, к субъекту права, а уже потом, физик, или юрик.
другое дело, что это "усложняет" формы просмотра/редактирования, но ИМХО упрощает проектирование/программирование в дальнейшем.

второй вариант, по сути первый, но с возможностью добавления/удаления типа пользователей без модификации объектов БД.
USERS_INFO - содержит сами атрибуты
USERS_TYPE - описание что это за атрибуты, и как их интерпритировать
вы раз это напишете, а в дальнейшем можно изменять типы пользователей и их атрибуты как угодно.
да, будет много пустых полей, не думаю, что база прям сильно вырастет и будет сильно напрягаться, джойниться всёравно будет по индексированному полю user_id. в веб форумах ваще, одна мега таблица с пользователями.. и ничё, работает.
я, таким образом, на одном сайте "универсальную базу" сделал... две таблицы, и хранить можно чё угодно, и списки документов, и перечень предприятий, и телефоны.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Виды пользователей и количество таблиц. / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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