|
|
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
Необходимо хранить информацию о пользователях ( пол, возраст, страна, город, адрес и т.д.) Этот набор может измениться в будущем. Два явных метода решения: I) Одна таблица Users со всеми этими полями ( пол, возраст... ) II) Таблица Users с основными данными ( * UserID, Login, Password, Email ) и таблица Profile ( * UserID, * PropertyName (nvarchar), PropertyValue). необходимо будет делать выборку по UserID, а так же осуществлять поиск пользователей по параметрам профиля ( н-р по полу ) Второй способ позволяет добавлять новые параметры профиля без изменения схемы БД. Однако, как вы думаете, является ли второй метод настолько медленнее первого в выполнении запросов, что от него придётся отказаться? Скажем при 10000 пользователей и 10 параметрах профиля ( т.е 100 000 записей в таблице Profile ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 00:26 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
поиск "EAV модель" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 01:31 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
AxelTvявляется ли второй метод настолько медленнее первого в выполнении запросов Смотря какие запросы будут... Какая у вас стоит задача? Если просто проверить "есть ли такой пользователь" - это одно. Если строить аналитику по анализу состава пользователей - немного другое... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 11:03 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
первый точно подход не очень, годится если делать что-то очень простое и которотко-живущее, аля анкета-на-пикник. второй подход лучше, но тоже не очень из-за (pkey, PropertyName (nvarchar), PropertyValue) . Лучше сделать 3 или более таблиц, вроде Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. нормальную инфу, то что будете использовать ( пол, возраст, страна, город, адрес и т.д.) храните в в Profiles, а всякий "мусор" можно хранить в ProfilesAddInfo. Если появляется требование xранить дополнительную информацию то можно или изменит Profiles и добавить туда доп. поле, например в случае если надо хранить номер телефона, или добавлять данные в ProfilesAddInfo, если дупистим появилось требование хранить какое-нибудь инфо вроде (ЦветБрасетки text) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 11:52 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
krvsa Смотря какие запросы будут... Какая у вас стоит задача? Если просто проверить "есть ли такой пользователь" - это одно. Если строить аналитику по анализу состава пользователей - немного другое... Сложная аналитика будет выполняться очень редко. Основное - н-р выборка пользователей по полу, по стране, по возрасту и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 13:17 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
Konstantin~ Лучше сделать 3 или более таблиц, вроде .... Не понимаю, зачем в вашем случае выносить основную инфу в таблицу Profiles, а не в Users. Насколько критична разница во времени выполнения поиска пользователей по "основному полю" из Profiles и по "дополнительному" из ProfilesAddInfo? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 13:23 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
AxelTvСложная аналитика будет выполняться очень редко. Ну вот и ответ... В любом случае серия тестов покажет какие "недостатки" у той или иной системы хранения данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 13:23 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
Konstantin~первый точно подход не очень, годится если делать что-то очень простое и которотко-живущее, аля анкета-на-пикник.И тем неменее весь мир упорно прется по этому неправильному пути на "пикник-анкетирование". А вы им раскрыли глаза... PS: Прочитайте про EAV. И прикиньте сколько будет формироваться аналитика по паре млн. анкет с фильтрацией по 10 условиям (разными условиями: сравнение по значению, комбинации AND и OR, заполнено/не заполнено) и группировкой по 3-м полям, например... После этого советуйте. PS2: EAV структуры кажутся решением всех проблем хранения атрибутов, но при этом в реальной жизни создают много неудобств в обработке данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 20:03 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
AxelTvОсновное - н-р выборка пользователей по полу, по стране, по возрасту и т.д.Я бы рекомендовал внести все основные поля по которым будет проводиться поиск в основную таблицу USERS. Если есть реальная потребность в динамических атрибутах, по которым не будет аналитики - добавьте EAV (подход 2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 20:08 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
AxelTv Не понимаю, зачем в вашем случае выносить основную инфу в таблицу Profiles, а не в Users. Насколько критична разница во времени выполнения поиска пользователей по "основному полю" из Profiles и по "дополнительному" из ProfilesAddInfo? "зачем две таблицы?" : просто удобнее будет работать когда данные которые по существу относятся и используются при логине (и/или авторизации) находятся в отдельном месте и не перемешаны с доп. данными из profiles. Такой подход может в последствии сильно облегчить жизнь если надо что-то менять в проекте. Иными словами такой подход дает доп. преимущества, а понадобятся-ли они в вашем проэкте я не знаю. "на сколько быстрее?": при небольшом кол-ве записей ( < 10М ) и стандартном оборудовании (modern x86 / х86_64 hardware) существенной разницы по скорости не будет, даже учитывая тот факт что индекс по основному полю в Profiles сделать проще чем partial index (если оный поддерживает ваш север бд) по доп. полям в ProfilesAddInfo. Просто если данные представляют определённую ценность т.е. бизнес-требования налагают определённые ограничения на корректность данных, то это намного проще сделать в случае с основными полями в Profiles (т.е. пол -> подстановка из списка, max_year <год рождения < min_year и тд.) чем с данными сохранёнными в виде (id, AttrName, AttrValue) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2008, 00:39 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
BelyИ тем неменее весь мир упорно прется по этому неправильному пути на "пикник-анкетирование". А вы им раскрыли глаза... PS: Прочитайте про EAV. И прикиньте сколько будет формироваться аналитика по паре млн. анкет с фильтрацией по 10 условиям (разными условиями: сравнение по значению, комбинации AND и OR, заполнено/не заполнено) и группировкой по 3-м полям, например... После этого советуйте. PS2: EAV структуры кажутся решением всех проблем хранения атрибутов, но при этом в реальной жизни создают много неудобств в обработке данных. 2 Bely про то что "весь мир" проектирует базы виде одной большой таблицы вы меня не убедили. Я знаю о существовании EAV модели, и таковая имеет смысл если данные не несут особого смысла кроме как для приложения которое их использует (хранения сереализованых данных классов и проч). В других случаях часто имеются требование по обеспечению корректности данных, а вот тут у EAV-модели проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.05.2008, 00:50 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
Konstantin~2 Bely про то что "весь мир" проектирует базы виде одной большой таблицы вы меня не убедили.Я не говорил про одну большую таблицу. Я говорил про использование стандартных реляционных таблиц вместо EAV. Konstantin~Я знаю о существовании EAV модели... Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2008, 10:48 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
а если сотрудник поменяет фамилию? (заумуж выйдет или еще что) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2008, 11:07 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
MrPavelа если сотрудник поменяет фамилию? (заумуж выйдет или еще что)А если это никого не интересует? Для начала надо выяснить что проектируется - Отдел кадров или Интернет форум ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2008, 11:24 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
для различных модулей твоего проекта существует ОГРОМНЫЙ дисбаланс потребления ресурсов => оптимизировать имеет смысл 10%-0.1% кода проекта (чаще <1%), для остальных 99% надо делать не "быстрее" а "правильнее". так вот если это не аналог отдела кадров, то естественно надо разбивать на ряд таблиц. (хотя в противном случае (если запросы с пользователями являются критичными по скорости) все равно почти всегда разбиение нужно) вотЪ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 10:01 |
|
||
|
профили пользователей - 2 подхода
|
|||
|---|---|---|---|
|
#18+
для различных модулей твоего проекта существует ОГРОМНЫЙ дисбаланс потребления ресурсов => оптимизировать имеет смысл 10%-0.1% кода проекта (чаще <1%), для остальных 99% надо делать не "быстрее" а "правильнее". так вот если это не аналог отдела кадров, то естественно надо разбивать на ряд таблиц. (хотя в противном случае (если запросы с пользователями являются критичными по скорости) все равно почти всегда разбиение нужно) вотЪ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2008, 14:33 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35301172&tid=1543868]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
165ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 211ms |
| total: | 463ms |

| 0 / 0 |
