|
|
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
Итак Здравстуйте всем!! Суть проблемы: Есть 5(может больше, может меньше, не суть) типов пользователей. Причём абсолютно разных, т.е. существующие поля у одного типа не существуют у другого. Соответственно использовать для всех типов одну таблицу не целесообразно по моему (или нет?). Ведь поля, которые будут заполнены у одного типа, останутся пустыми у другого. Вопрос: Что собственно делать?? Размышления: Если разнести пользователей по разным таблицам, то даже не считая траблов с добавлением нового типа пользователя (придётся создавать новую таблицу, а уж что там будет в php коде и думать боюсь) проблем будет навалом. Например пользователи могут общаться между собой по средствам сообщений. Хм, как же это реализовать??!! Ведь у каждой таблицы с типом юзера будет своё независимое поле id. => не сможем связать таблицу с сообщениями и таблицу с юзерами. Или как вывести всех пользователей разом(разумеется можно, но уж очень геморно). Кто поможет?)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 21:44 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 22:51 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
Кифирчик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 типов будут как бы ничем) Это конечно может и нормально, просто мне вот интересно, какой тут оптимальный подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2008, 23:47 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
alver, В добавлении к Кефирчику, почитайте тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2008, 11:31 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
1. а зачем users и users_info разносить, ведь все равно отношение 1 к 1. 2. ну будут пустые поля и что?пасите тип пользователя и в триггере проверяйте все ли поля для данного типа заполнены,а при смене типа в этом же триггере чистите ненужные поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2008, 12:27 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
Если пользователи имеют разные атрибуты(при чем не в значении, а самом типе атрибуте), то это уже разные сущности. И хранить их нужно в разных таблицах(как описал кефирчик в первом варианте). alverто даже не считая траблов с добавлением нового типа пользователя (придётся создавать новую таблицу, а уж что там будет в php коде и думать боюсь) Автоматизировать нужно не хранение, а представление. p.s. похоже на спор "Хранить ли все справочники в одной таблице" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2008, 14:49 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
Shtock1. а зачем users и users_info разносить, ведь все равно отношение 1 к 1. Не 1 к 1, а 1 к 0..1 Разница существенная в структуре. Shtock2. ну будут пустые поля и что?пасите тип пользователя и в триггере проверяйте все ли поля для данного типа заполнены,а при смене типа в этом же триггере чистите ненужные поля.Нормализация данных, однако. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2008, 15:18 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
Никакого спора нет) Просто я хочу узнать мнение более опытных юзверей чем я по этому вопросу) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2008, 16:16 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
Нормализация не должна увеличивать геморой по разработке. Так сказать любой документированный баг - не баг. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2008, 16:51 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
ShtockНормализация не должна увеличивать геморой по разработке. Так сказать любой документированный баг - не баг.Не вижу гемороя. Если есть два вида пользователей: физ лицо, юр лицо Для одного надо указать: ФИО, телефон, домашний адрес Для второго: Название организации, ИНН, Юр адрес, ОКОНХ, ОКПО зачем это все хранить в одной таблице? Это даже вводиться будет в разных формах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2008, 17:17 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
>> Если есть два вида пользователей: физ лицо, юр лицо >> зачем это все хранить в одной таблице? >> Это даже вводиться будет в разных формах. А как на счет того, что контрагентом (покупателем, к примеру) может быть и физическое, и юридическое лицо? Будем плодить дополнительный флаг "тип контрагента" в "Заказах"? Если у человека речь идет о пользователях, то это гораздо более однородный объект, т.е. по сути любой метод (свойство) может относиться к любому пользователю, к тому же ТИП пользователя изменяться может. P.S. Что страшного в пустых полях? Все нормальные СУБД успешно с этим справляются. А чтобы программеру творить удобней было - представления существуют... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2008, 19:42 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
Kirill Razuvaev P.S. Что страшного в пустых полях? Все нормальные СУБД успешно с этим справляются. А чтобы программеру творить удобней было - представления существуют... Ну, так это снова вопрос из темы хранить ли все справочники в одной таблице. Вроде, как разрешили его, нет? Здесь микродискуссия, хорошо демонстрирующая отрицательные стороны этого дела. А представления, конечно, могут скрыть денормализованную структуру БД и представить её в наилучшем виде, но их сила, скорее, в обратном, - в возможности связывать таблицы между собой пред непосредственной выдачей результата клиенту. Вот в представлениях наличие пустых полей более "легитимно", чем в таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2008, 23:02 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
Kirill RazuvaevА как на счет того, что контрагентом (покупателем, к примеру) может быть и физическое, и юридическое лицо? Будем плодить дополнительный флаг "тип контрагента" в "Заказах"? Если у человека речь идет о пользователях, то это гораздо более однородный объект, т.е. по сути любой метод (свойство) может относиться к любому пользователю, к тому же ТИП пользователя изменяться может.Еще раз перечитайте это . Если у пользователя изменился тип, то это ДРУГОЙ пользователь. У Юр-лилица с физ.лицом и Юр.лица-с-Юр-лицом - разные взаимоотношения. Даже разные законы действуют. Не надо относиться к типу пользователя как к дополнительному атрибуту вроде "цвет волос", "место работы" - и все станет по другому. Kirill RazuvaevP.S. Что страшного в пустых полях? Все нормальные СУБД успешно с этим справляются. А чтобы программеру творить удобней было - представления существуют... А что в них хорошего? Или программист не может освоить JOIN из двух таблиц и написать необходимые VIEW ? Предложенная схема - не сложнее одной таблицы, зато намного гибче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 11:26 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
если пользоваатель может быть одновременно двумя и более типами, то ссылка на его таблицы идет в отдельной таблице , а не в таблице пользователей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 11:37 |
|
||
|
Виды пользователей и количество таблиц.
|
|||
|---|---|---|---|
|
#18+
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. в веб форумах ваще, одна мега таблица с пользователями.. и ничё, работает. я, таким образом, на одном сайте "универсальную базу" сделал... две таблицы, и хранить можно чё угодно, и списки документов, и перечень предприятий, и телефоны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2008, 13:33 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35657766&tid=1543563]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
169ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 450ms |

| 0 / 0 |
