|
|
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Нужно реализовать хранение следующих объектов. Список пользователей (контейнер для хранения пользователей). Список пользователей должен содержать список определенных пользователем полей для объектов пользователь, которые хранятся в данном списке. Пользователи, пользователь принадлежит одному и только одному списку, имеет как постоянные поля, например, email, так и значения полей определенных пользователем (которые сопоставлены списку, которым принадлежит пользователь). Сегмент пользователей определенного списка пользователей, который представляет собой набор условий вида: Объедниение условий: все, хотя бы одно из условий. "Значение поля пользователя" Оператор "Значение". Например, для списка пользователя List1 добавили дополнительное поле, Age. Так, что сегмент для пользователей данного списка может быть Age Больше 20. Для реализвации данной схемы можно использовать наборы связанных таблиц. Но для выполнения проверок в этом случае придется часто в запросах объединять много таблиц. А можно я полагаю использовать другой подход: хранить список определенных пользователей полей для списка как строковое поле (преобразованный объект или массив в строку). А такблице пользователей хранить набор условий как строку. Как вы думает имеет ли смысл хранить ненормализованные данные и использовать второй подход? Кто-нибудь реализовывал такой вариант? Использую MYSQL и PHP. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 11:50 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Вопрос вспылывающий раза два в неделю. Ищите в данном форуме по слову EAV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 13:42 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
ShtockВопрос вспылывающий раза два в неделю. Ищите в данном форуме по слову EAV Я уже смотрел http://www.sql.ru/forum/actualthread.aspx?tid=777825 и http://en.wikipedia.org/wiki/Entity-attribute-value_model. Вопрос остался имеет ли смысл в данном случае испоользовать для хранения строки или множество связанных таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 13:54 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
ShtockВопрос вспылывающий раза два в неделю. Ищите в данном форуме по слову EAV Если бы не нужно было хранить данные для сегментации я бы без сомнения выбрал вариант со связанными таблицами. Но при наличии условия для сегментаций проверка на того, удовлетворяет ли пользватель данным условиям или нет потребует объединять данные из многих таблиц. Если хранить как строки, мне представляется усложняется редактировани данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 13:57 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Как вы думаете имеет ли смысл хранить иногда сложные струтуры данных (объекты массивы) просто в виде строки, а уже разбирать их в программе? Я понимаю, что с точки зрения проектирования БД - это ересь, это нарушение первой нромальной формы, но тем не менее, кто-нибудь хранил когда-нибудь неатомарные данные в виде строки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 22:28 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005Как вы думаете имеет ли смысл хранить иногда сложные струтуры данных (объекты массивы) просто в виде строки, а уже разбирать их в программе? Я понимаю, что с точки зрения проектирования БД - это ересь, это нарушение первой нромальной формы, но тем не менее, кто-нибудь хранил когда-нибудь неатомарные данные в виде строки. Я храню, но мне при этом не нужна ни фильтрация, ни сортировка по этим полям. Т.е. в бизнес-логике они никогда не используются разрозненно. Лишь вводятся в отдельных полях и выводятся в отдельные столбцы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2010, 23:13 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
авторКак вы думаете имеет ли смысл хранить иногда сложные струтуры данных (объекты массивы) просто в виде строкиТогда уж как XML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2010, 03:19 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
SERG1257авторКак вы думаете имеет ли смысл хранить иногда сложные струтуры данных (объекты массивы) просто в виде строкиТогда уж как XML Думаю можно и в XML. Просто интересно, храните ли вы неатомарные данные или этого не стоит делать ни при каких обстоятельствах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2010, 10:05 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Edd.DragonOLEG_2005Как вы думаете имеет ли смысл хранить иногда сложные струтуры данных (объекты массивы) просто в виде строки, а уже разбирать их в программе? Я понимаю, что с точки зрения проектирования БД - это ересь, это нарушение первой нромальной формы, но тем не менее, кто-нибудь хранил когда-нибудь неатомарные данные в виде строки. Я храню, но мне при этом не нужна ни фильтрация, ни сортировка по этим полям. Т.е. в бизнес-логике они никогда не используются разрозненно. Лишь вводятся в отдельных полях и выводятся в отдельные столбцы. Я полагаю, что набор полей, который может храниться в строке не будет использоваться обособленно, судя по всем может быть примерно так: получаем строковое поле, а преобразывем в массив и обрабытваем все элементы массива. При таком подходе видимо несколько усложнится редактирование данных, например, условий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2010, 10:10 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Интересно было бы узнать, какой подход используете для хранения сложных структур в БД, использование много связанных таблиц или хранение в поле в виде строки (может быть в XML) и вопросы целостности данных решать на уровне приложения. Каким соображениями вы руководствуетесь при выборе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 10:36 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005Просто интересно, храните ли вы неатомарные данные или этого не стоит делать ни при каких обстоятельствах.Ну как минимум нарушение 1-й норм. формы. Не есть хорошо. Чтоб использовать, нужно иметь очень серьезные аргументы для этого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 12:11 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
LSVOLEG_2005Просто интересно, храните ли вы неатомарные данные или этого не стоит делать ни при каких обстоятельствах.Ну как минимум нарушение 1-й норм. формы. Не есть хорошо. Чтоб использовать, нужно иметь очень серьезные аргументы для этого. Меня тоже очень смущает нарушение первой нормальной формы. Возможная аргументация, которая мне видится сейчас, избежать запросов с объединением 6-7 таблиц, заменяя более простыми запросами, извлечения данных из строковых полей, распаковка в массив и обработка. Имеет ли такой способ право на существование? Насколько данный аргумент кажется убедительным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 12:21 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005Возможная аргументация, которая мне видится сейчас, избежать запросов с объединением 6-7 таблиц, заменяя более простыми запросами, извлечения данных из строковых полей, распаковка в массив и обработка. и вы, конечно, уверены, что парсинг строки, распаковка в массив, и обработка ( где, кстати, это будет происходить? ), будет быстрее, чем запрос с объединением каких-то 6-7 таблиц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 12:30 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
egorychOLEG_2005Возможная аргументация, которая мне видится сейчас, избежать запросов с объединением 6-7 таблиц, заменяя более простыми запросами, извлечения данных из строковых полей, распаковка в массив и обработка. и вы, конечно, уверены, что парсинг строки, распаковка в массив, и обработка ( где, кстати, это будет происходить? ), будет быстрее, чем запрос с объединением каких-то 6-7 таблиц? Нет я не уверен, что это быстрее и лучше, поэтому я и задаю это вопрос. Как в этом случаем могла проиходить обработка: PHP скрипт мог получить строковое поле, проебразовать в массив (дерево XML или что-то в этом роде), пройти по массиву и проверить выполнения каждого условия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 12:35 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
egorych, Проверки условия будут выполнять достаточно часто, например, решаться такая задача, просмотреть списка пользователей, выбарать пользователей удовлетворяющего опреленным критериям, которые представляют собой набор логических условий вида Поле Оператор сравения Значение, где поле - это как поля общение для всех пользователей, так и поля специфичные только для данного списка. Либо условие, где проверяется входжение пользователя в определенную группу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 12:42 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005egorych, Проверки условия будут выполнять достаточно часто, например, решаться такая задача, просмотреть списка пользователей, выбарать пользователей удовлетворяющего опреленным критериям, которые представляют собой набор логических условий вида Поле Оператор сравения Значение, где поле - это как поля общение для всех пользователей, так и поля специфичные только для данного списка. Либо условие, где проверяется входжение пользователя в определенную группу.для всего этого предназначен SQL, а не PHP какой-нибудь убогий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 13:42 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
egorychOLEG_2005egorych, Проверки условия будут выполнять достаточно часто, например, решаться такая задача, просмотреть списка пользователей, выбарать пользователей удовлетворяющего опреленным критериям, которые представляют собой набор логических условий вида Поле Оператор сравения Значение, где поле - это как поля общение для всех пользователей, так и поля специфичные только для данного списка. Либо условие, где проверяется входжение пользователя в определенную группу.для всего этого предназначен SQL, а не PHP какой-нибудь убогий. То есть вы считаете, что в всегда хранить сложные струтуры в связанных таблицах, а хранение неатомарных данных в виде строки всегда является неправильным подходом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 13:47 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005То есть вы считаете, что в всегда хранить сложные струтуры в связанных таблицах, а хранение неатомарных данных в виде строки всегда является неправильным подходом?да. И это не я так считаю, это теория построения реляционных баз данных так считает. Если задача в конечном итоге и потребует денормализации, то в любом случае, не такой убогой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 15:04 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
egorychOLEG_2005То есть вы считаете, что в всегда хранить сложные струтуры в связанных таблицах, а хранение неатомарных данных в виде строки всегда является неправильным подходом?да. И это не я так считаю, это теория построения реляционных баз данных так считает. Если задача в конечном итоге и потребует денормализации, то в любом случае, не такой убогой. Я тоже склоняюсь к тому, чтобы сначала использовать нормализованные данные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 15:20 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
egorychOLEG_2005То есть вы считаете, что в всегда хранить сложные струтуры в связанных таблицах, а хранение неатомарных данных в виде строки всегда является неправильным подходом?да. И это не я так считаю, это теория построения реляционных баз данных так считает. Если задача в конечном итоге и потребует денормализации, то в любом случае, не такой убогой. С точки зрения проектирования БД согласен, что это ересь. Но ведь вы не будете отрицать, что иногда в строке хранять неатомарные данные, например, в XML формате? Наверное иногда имеет смысл применять денормализацию. Но тем не менее, вероятно, стоит сначала использовать нормализованные данные. А потому в случае необходимости прибегать к нормализации в случае необходимости. Просто меня смутило, что для выполнения простых условий проверки, которые должны выполняться часто, необходимо использовать запрос с объединением большого числа таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 15:29 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005: >> Но ведь вы не будете отрицать, что иногда в строке хранять неатомарные данные, например, в XML формате? лично я в XML не верю >> Наверное иногда имеет смысл применять денормализацию. это наверняка, но не такую идиотскую. Потому что такая денормализация не несёт в себе никаких положительных черт. Вообще. Чистейшая пессимизация приложения. >> Просто меня смутило, что для выполнения простых условий проверки, которые должны выполняться часто, необходимо использовать запрос с объединением большого числа таблиц. люди и по 200-300 таблиц крестят постоянно и ничего, не жужжат, а тут 6-7, да разве это много ))) сделай себе view, в конце концов и проверяй уже по нему. Вообще говоря, любой SQL-сервер оптимизирован как раз на работу с большим количеством связанных таблиц, именно в возможности быстро обрабатывать данные, хранящиеся в таком виде, основная его прелесть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 15:59 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005LSVOLEG_2005Просто интересно, храните ли вы неатомарные данные или этого не стоит делать ни при каких обстоятельствах.Ну как минимум нарушение 1-й норм. формы. Не есть хорошо. Чтоб использовать, нужно иметь очень серьезные аргументы для этого. Меня тоже очень смущает нарушение первой нормальной формы. Возможная аргументация, которая мне видится сейчас, избежать запросов с объединением 6-7 таблиц, заменяя более простыми запросами, извлечения данных из строковых полей, распаковка в массив и обработка. Имеет ли такой способ право на существование? Насколько данный аргумент кажется убедительным? создать view на основ 6-7 таблиц и на его основе нужные хранимки и забыть обо всем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 17:33 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005То есть вы считаете, что в всегда хранить сложные струтуры в связанных таблицах, а хранение неатомарных данных в виде строки всегда является неправильным подходом?Я считаю. Неатомарность будет иметь свойство увеличиваться и тогда рухнет производительность. Рухнет по взрослому. Неатомарность - зло. Допустима лишь изредка в заведома некритичных точках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2010, 18:19 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Я думаю то, что я имел в виду насчёт хранения слабоструктурированных данных в одном поле называется serializedLOB. http://www.martinfowler.com/eaaCatalog/serializedLOB.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 11:15 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Нашел книгу Pragmatic.SQL.Antipatterns. В ней сильно ругаю EAV, когда количество атрибутов заранее неизвестно, как альтернатива EAV предлагается: Semistructured Data If you have many subtypes or if you must support new attributes frequently, you can add a BLOB column to store data in a format such as XML or JSON, which encodes both the attribute names and their values. Martin Fowler calls this pattern the Serialized LOB. Download EAV/soln/create-blob-tables.sql CREATE TABLE Issues ( issue_id SERIAL PRIMARY KEY, reported_by BIGINT UNSIGNED NOT NULL, product_id BIGINT UNSIGNED, priority VARCHAR(20), version_resolved VARCHAR(20), status VARCHAR(20), issue_type VARCHAR(10), -- BUG or FEATURE attributes TEXT NOT NULL, -- all dynamic attributes for the row FOREIGN KEY (reported_by) REFERENCES Accounts(account_id), FOREIGN KEY (product_id) REFERENCES Products(product_id) ); The advantage of this design is that it’s completely extensible. You can store new attributes in the blob at any time. Every row stores a potentially distinct set of attributes, so you have as many subtypes as you have rows. The disadvantage is that SQL has little support for accessing specific attributes in such a structure. You can’t easily select individual attributes within the blob for row-based restriction, aggregate calculation, sorting, or other operations. You must fetch the whole blob of attributes as a single value and write application code to decode and interpret the attributes. This design is best when you can’t limit yourself to a finite set of subtypes and when you need complete flexibility to define new attributes at any time. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 11:26 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
В книге есть фраза, что системы с использование EAV где-то через год становятся громоздкими. Может ли кто-нибудь прокомментировать данное утверждение? Если кого-нибудь заинтересует книга, пишите, могу скинуть по почте, она занимает около 1.5Mb, так что здесь выложить её не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 11:31 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
EAV имхо - наименьшее зло. хранение в блобе или XML гораздо неудобнее. на практике используют гибрид EAV - поля известные на этапе проектирования лежат в нормальных таблицах, поля пользовательские в EAV. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 11:43 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
ScareCrowEAV имхо - наименьшее зло. хранение в блобе или XML гораздо неудобнее. на практике используют гибрид EAV - поля известные на этапе проектирования лежат в нормальных таблицах, поля пользовательские в EAV. А в чем провляются основные недостатки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 11:50 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
У меня для списка есть от 1 до 3 постоянных полей, и до 40 полей определенных пользователем. При чём вполне возможно, что полья определенные пользователем будут использоваться не так уж часто, но возможность их создания и проверки условий по всем полям быть должна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 11:59 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
ScareCrowEAV имхо - наименьшее зло. хранение в блобе или XML гораздо неудобнее. на практике используют гибрид EAV - поля известные на этапе проектирования лежат в нормальных таблицах, поля пользовательские в EAV. Проблема гибридной системы указанной вами видится в сложности задания логической проверки, на основе атрибутов. Допустим есть постоянные атрибуты Email, FirstName, LastName, которые храняться как обычные поля в таблице. И есть специфические для определенного списка, которые хранятся как EAV, например, AGE. Если для пользователя нужно хранить условие Email содержит something@mydomain.com И AGE > 20, то возникает вопрос, как хранить такие данны в таблице, так как в одном случае атрибут - обычное поле в таблице, в другом случае - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 14:26 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Как вы думаете в данном случае выбор может зависеть от используемой СУБД? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 14:44 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
А почему бы не рассказать подробнее об условиях задачи, и попытаться решить ее простыми атомарными полями в нормальной форме. Нового под луной очень и очень мало. Или просто хочется что-нибудь эдакой, чего ни у кого нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 16:59 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
SERG1257А почему бы не рассказать подробнее об условиях задачи, и попытаться решить ее простыми атомарными полями в нормальной форме. Нового под луной очень и очень мало. Или просто хочется что-нибудь эдакой, чего ни у кого нет? Нет, что-нибудь эдакого не хочется. Просто хочется решить задачу достаточно эффективно и не изобретать велосипед. Спасибо, за замечание. Я попытаюсь сформулировать задачу точнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2010, 20:23 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Задача примерно такая: Есть задача рассылать почту списку подписчиков, причём иметь возможность отправлять данные не обязательно всему списку, а некоторому сегменту, который удовлетворяет определенным условия. В системе есть следующие объекты: 1. Списки подписчиков (lists). Список подписчиков – контейнер для хранения подписчиков. 2. Подписчики – пользователи, которым отправляется информация. Информация о подписчиках бывает как общая для всех подписчиков, например, электронный адрес, так и специфичный для списка, куда входит подписчик, набор атрибутов. Например, для некоторого списка могут быть список дополнительных полей о подписчиков, которые должны храниться для подписчиков данного списка. Отношения между списком подписчиков и подписчиком – один ко многим, если подписчик входит в несколько список сразу, то система их считает разными подписчиками. 3. Группы (groups) и подгруппы (dimensions). С каждый список пользователей может иметь произвольное число групп. Каждая группа содержит одну или более подгрупп. Таким образом, каждый подписчик данного списка может входить в одну или несколько подгрупп каждой группы. 4. Кампании (campaigns) – это сообщения, отправляемые подписчикам определенного списка подписчиков. Отношения между списком подписчиков и компаниями один ко многим. 5. Для кампании может быть задан не более одного сегмента, который представляет собой набор условий, объединенных либо по “И”, либо по “ИЛИ”. Условия бывают двух типов: • Значение поля подписчика Оператор Значение (при чем поле может быть как общее для всех подписчиков списков, так и специфичное для данного списка). • Имя группы Оператор (в одну из подгрупп, во все подгруппы, ни в одну из подгрупп) Список подгрупп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 11:45 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 11:47 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> Есть задача рассылать почту списку подписчиков Нормальная задача. Для какой цели наворочено то, что вы нарисовали, не очень понятно. Опишите подробнее предметную область и принципы группировки пользователей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 11:57 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Операция проверки условий и отправки кампаний выполняется регулярно, это в общем-то основная функция системы, наряду с создание и редактирование объектов системы. Поэтому хотелось бы реализовать это наиболее эффективно. Таблицы списков и кампаний являются подчиненными таблицами для таблицы аккаунты, которая для простоты не указана на схеме. То есть есть много аккаунтов, каждый их который имеет набор подобных объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:01 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Есть задача рассылать почту списку подписчиков Нормальная задача. Для какой цели наворочено то, что вы нарисовали, не очень понятно. Опишите подробнее предметную область и принципы группировки пользователей. Подпичики могу группироваться в одну или нескольк подгрупп группы произвольно. Например, группа "Языки" може иметь подгруппы "Английский", "Немецкий", "Французский". Соответсвенно условие в сегмене для груп будет отправить пользователям знающий один из этих языков, все эти языки, ни одного из этих языков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:07 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Объекты, система, аккаунты - это просто слова. Есть юзеры, которые сгруппированы по некоторым правилам. Есть нечто, получаемое этими юзерами. Вопрос тривиален: как эти юзеры сгруппированы? Не надо схем и зависимостей, просто семантическое определение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:10 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> Подпичики могу группироваться в одну или нескольк подгрупп группы произвольно. Нормальная реализация. Не хватает формального описания принципов группировки, если я правильно понял ваш ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:16 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Назначение таблиц, приведенных в схеме следующее: 1. Lists - списки подписчиков. 2. Campaigns - кампании. 3. Subscribers - подписчики, каждый подписчик входит только в один список и хранит как общие поля для всех подписчиков, например, email, так и специфичный для списка, куда он входит. 4. User_defined_fields - специфичные для списков поля, которые которые должных храниться для подписчиков данного списка. 5. Field_values - значения специфичных для данного списка полей подписчиков. 6. Field_choices - для некторых полей значений могут вводиться только из фиксированного набора, эти значение храняться в этой таблице. 7. Subscribers_types - информация о типе поля (не уверен, что эта таблица необходимо, но это пока не важно). 8. Groups - группа для списка, например, "Знание языков". 9. Dimensions - подгруппы данной группы, например, для группы "Знание языков" - "Английский", "Немецкий" и т.д. 10. Dimensions_subscriber - указывает подписчиков, которые входя в подгруппу данной группы. 11.Segment_conditions - условия проверка для сегмента кампании. 12. Segment_dimensions - подгруппы, проверка вхождения в которые проверяется для условия сегмента кампании. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:21 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Подпичики могу группироваться в одну или нескольк подгрупп группы произвольно. Нормальная реализация. Не хватает формального описания принципов группировки, если я правильно понял ваш ответ. Могли бы вы, пожалуйста, пояснить, что вы имеете в виду? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:22 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
guest_20040621, Вы имеет под в виду подписчиков, когда говорите о юзерах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:23 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> Могли бы вы, пожалуйста, пояснить, что вы имеете в виду? "Языки" можно интерпретировать по-разному. Это могут быть, например, языки, которые изучает пользователь или языки, которыми владеет пользователь. Также пользователь может иметь предпочтение, на каком языке он хотел бы получать рассылаемые материалы. Если использовать просто определение "языки", функциональная нагрузка такой группировки не очевидна. Ваша задача - придумать такое формальное описание характеристик, которое позволяло бы конструировать семантические условия выборки. С учетом того, что в вашей системе уже есть структура (или часть структуры) для семантической классификации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:29 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
guest_20040621Объекты, система, аккаунты - это просто слова. Есть юзеры, которые сгруппированы по некоторым правилам. Есть нечто, получаемое этими юзерами. Вопрос тривиален: как эти юзеры сгруппированы? Не надо схем и зависимостей, просто семантическое определение. Для списка подписчиков может быть создана группа и подгруппа. Соотственно подписчик может входить в любое число подгрупп групп списка, куда он входит. Если например, для списка есть группа "знание языка" (группа должна иметь хотя бы одну подгруппы, может быть моя формировка не совсем правильная я не знаю как лучше назвать), которая имеет подгруппы "Английский", "Немецкий". Для полписчика указано, входи ли он в подгруппу данной группы списка или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:29 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> Для списка подписчиков может быть создана группа и подгруппа. На мой взгляд, неоправданно жесткая реализация. Есть смысл выбрать группы и подгруппы по более формальному признаку, а дополнительные признаки для пользователей вести за рамками групп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:34 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> Вы имеет под в виду подписчиков, когда говорите о юзерах? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:35 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Могли бы вы, пожалуйста, пояснить, что вы имеете в виду? "Языки" можно интерпретировать по-разному. Это могут быть, например, языки, которые изучает пользователь или языки, которыми владеет пользователь. Также пользователь может иметь предпочтение, на каком языке он хотел бы получать рассылаемые материалы. Если использовать просто определение "языки", функциональная нагрузка такой группировки не очевидна. Ваша задача - придумать такое формальное описание характеристик, которое позволяло бы конструировать семантические условия выборки. С учетом того, что в вашей системе уже есть структура (или часть структуры) для семантической классификации. Что касается групп или подгрупп, мне кажется, что здесь семантика не очень важна, важен ли сам факт входи ли нет в некотору подгруппу. Можно рассматривать здесть просто, как удовлетворение абстрактному условия входит ли подписчик в одну, все, ни одну подгруппу данной группы списка или нет. А что под этой группой подразумевание пользователь это не столь важно. Смысл групп и подгруппы может быть разный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:36 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Для списка подписчиков может быть создана группа и подгруппа. На мой взгляд, неоправданно жесткая реализация. Есть смысл выбрать группы и подгруппы по более формальному признаку, а дополнительные признаки для пользователей вести за рамками групп. Можете ли вы пояснить вашу мысль, может быть, на примере? Не совсем понятно, что вы имеет в виду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:39 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> Что касается групп или подгрупп, мне кажется, что здесь семантика не очень важна На мой взгляд, как раз принципиальна. Не знаю, давно ли вы на sql.ru, здесь это обсуждалось некоторое время назад. Семантическая классификация позволяет при необходимости осуществить логический переход от слабоструктурированных данных к реляционной структуре. Но если такой задачи нет и заведомо известно, что она никогда не возникнет, то - да, можно ее не рассматривать. Однако, мне кажется, что в данном случае как раз семантическая классификация может быть решением вашей задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:46 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> Можете ли вы пояснить вашу мысль, может быть, на примере? Не совсем понятно, что вы имеет в виду. Пользователи -> единые для всех пользователей группы и подгруппы (сложно сказать, какими они могут быть в вашей системе без знания ее специфики; смысл в возможности однозначной группировке всех пользователей). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:52 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Что касается групп или подгрупп, мне кажется, что здесь семантика не очень важна На мой взгляд, как раз принципиальна. Не знаю, давно ли вы на sql.ru, здесь это обсуждалось некоторое время назад. Семантическая классификация позволяет при необходимости осуществить логический переход от слабоструктурированных данных к реляционной структуре. Но если такой задачи нет и заведомо известно, что она никогда не возникнет, то - да, можно ее не рассматривать. Однако, мне кажется, что в данном случае как раз семантическая классификация может быть решением вашей задачи. Честно говоря, больше сказать в данный момент о семантике. Здесь семантика скорее определяется пользователем. Для хранения этих слабоструктурированных данный подумывал о применении паттерна Serizalized LOB, то есть хранить данную в виде строки. Но в тоже время, я не уверен, что этот способ будет быстрее несмотря, на существенное уменьшение числа таблица, которые надо объединять для проверки в общем то не очень сложных условий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:55 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Можете ли вы пояснить вашу мысль, может быть, на примере? Не совсем понятно, что вы имеет в виду. Пользователи -> единые для всех пользователей группы и подгруппы (сложно сказать, какими они могут быть в вашей системе без знания ее специфики; смысл в возможности однозначной группировке всех пользователей). Дело в том, что не существует групп единых для всех подписчиков, они специфичны для каждого списка, их создает владелец списка и это может быть абсолютно всё что угодно и использоваться в самых разных предметных областях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:58 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
То есть сематику задает пользователь, в зависимости от назначения списка и используемой им предметной области. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 12:59 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> Здесь семантика скорее определяется пользователем. ;) На мой взгляд, было бы опрометчиво отдавать структурирование на откуп пользователям. Хотя... хозяин - барин, конечно. > не уверен, что этот способ будет быстрее Мне кажется, было бы правильным сначала найти принципиальное решение, а уже потом оптимизировать быстродействие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 13:00 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> не существует групп единых для всех подписчиков Мне сложно представить такую систему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 13:01 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Здесь семантика скорее определяется пользователем. ;) На мой взгляд, было бы опрометчиво отдавать структурирование на откуп пользователям. Хотя... хозяин - барин, конечно. > не уверен, что этот способ будет быстрее Мне кажется, было бы правильным сначала найти принципиальное решение, а уже потом оптимизировать быстродействие. Это требование заказчика, группы и поля специфичные для списка, должны создаваться владельцем списка подписчиков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 13:03 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
guest_20040621, Это Software as a service (SaaS) система, которая предоставляет возможность компаниям использовать рассылки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 13:41 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> Это требование заказчика, группы и поля специфичные для списка, должны создаваться владельцем списка подписчиков. Это не исключает возможность существования универсальной классификации. ;) Если совсем уж честно, мне сложно представить, что это за заказчик и почему он настолько туп, что его не интересует исследование аудитории. Впрочем, это не мое дело. Ваше решение, если особо не лезть в детали, вполне жизнеспособно, варианты оптимизации структуры данных будут зависеть от дополнительных условий (скажем, параллельное существование одной и той же рассылки на разных языках или существование у пользователя нескольких адресов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 15:24 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
У пользователя не может быть несколько адресов, только один email. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 15:37 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 15:50 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> У пользователя не может быть несколько адресов, только один email. Это тоже требование заказчика? Легко представить себе как минимум адрес корпоративной почты и персональной. И персональные ящики тоже могут служить разным целям. Впрочем, это ваш заказчик. Ну... да, с очень ограниченным представлением о функционале того, что ему нужно, но это в данном случае плюс, поскольку уменьшает количество работы. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 16:04 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005В книге есть фраза, что системы с использование EAV где-то через год становятся громоздкими. Может ли кто-нибудь прокомментировать данное утверждение? Если кого-нибудь заинтересует книга, пишите, могу скинуть по почте, она занимает около 1.5Mb, так что здесь выложить её не получится. Можно заполучить эту книгу ? Мой email в профайле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 16:27 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
guest_20040621> У пользователя не может быть несколько адресов, только один email. Это тоже требование заказчика? Легко представить себе как минимум адрес корпоративной почты и персональной. И персональные ящики тоже могут служить разным целям. Впрочем, это ваш заказчик. Ну... да, с очень ограниченным представлением о функционале того, что ему нужно, но это в данном случае плюс, поскольку уменьшает количество работы. ;) Я думаю сделано это из-за того ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 16:27 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Один адрес для рассылки используется во всех подобных системах, которые я знаю. Заказчик решил поступить аналогично. Наверное, не имеет смысл отправлять одну и туже информацию по разным адресам одному и тому же подписчику, в некоторых тарифах плата взимается за количество отправки писем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 16:31 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Flying DutchmanOLEG_2005В книге есть фраза, что системы с использование EAV где-то через год становятся громоздкими. Может ли кто-нибудь прокомментировать данное утверждение? Если кого-нибудь заинтересует книга, пишите, могу скинуть по почте, она занимает около 1.5Mb, так что здесь выложить её не получится. Можно заполучить эту книгу ? Мой email в профайле. Книгу вам отправил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 16:35 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005 Книгу вам отправил. Огромное спасибо ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 16:38 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
> Один адрес для рассылки используется во всех подобных системах, которые я знаю. Не совсем так. Я бы сказал, что в распространенном софте для управления рассылками почтовый аккаунт приравнен к пользователю. Что как бы не корректно. В принципе, можно было бы ожидать во вновь проектируемых системах исправления недочетов существующих. Но если заказчик платит деньги - кто я такой, чтобы его осуждать? ;) > не имеет смысл отправлять одну и туже информацию по разным адресам одному и тому же подписчику Не имеет. Но, например, воспользоваться альтернативным адресом при недоступности основного - очень даже правильно. Аудитория стоит денег. Глупо терять подписчика на ровном месте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 16:51 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005В книге есть фраза, что системы с использование EAV где-то через год становятся громоздкими. Может ли кто-нибудь прокомментировать данное утверждение? "Становятся громоздкими" - какое-то расплывчатое утверждение. Одни проекты становятся громоздкими, другие нет. Я недавно учавствовал в проекте по разработке веб-магазинов, в котором мы использовали EAV для хранения атрибутов различных товаров. Конечно, с EAV несколько медленнее, чем без него из-за более сложной структуры БД, но в нашем случае скорость работы была удовлетворительной. Использование XML для хранения атрибутов было бы проще, но в этом случае возникли бы проблемы с поиском. Например, запрос такого вида: "Найти всю обувь марки Ferragamo черного цвета размера 44" с использованием XML реализовать значительно сложнее, чем с использованием EAV. В последнем случае (для нашей реализации EAV) это решается одним простым запросом с использованием реляционного деления. Причем запрос один и тот же для любых атрибутов (просто он реализуется для SQL Server, для других СУБД может быть и сложнее). Конечно, здесь я имею в виду запросы с проверкой значений атрибутов только на равенство. Запросы типа "Найти все мониторы с дигональю от 17 до 21 дюйма" будут реализовываться сложнее. Хотя и в этом случай реализация с EAV будет проще реализации с XML. Хотя, вроде бы, в последней версии SQL Server (наш проект разрабатывался под SQL Server 2008) появились средства для индексирования XML-полей и быстрого поиска в них (но я в пока еще не разобрался, так что сказать ничего не могу). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 17:02 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Flying DutchmanOLEG_2005В книге есть фраза, что системы с использование EAV где-то через год становятся громоздкими. Может ли кто-нибудь прокомментировать данное утверждение? "Становятся громоздкими" - какое-то расплывчатое утверждение. Одни проекты становятся громоздкими, другие нет. Я недавно учавствовал в проекте по разработке веб-магазинов, в котором мы использовали EAV для хранения атрибутов различных товаров. Конечно, с EAV несколько медленнее, чем без него из-за более сложной структуры БД, но в нашем случае скорость работы была удовлетворительной. Использование XML для хранения атрибутов было бы проще, но в этом случае возникли бы проблемы с поиском. Например, запрос такого вида: "Найти всю обувь марки Ferragamo черного цвета размера 44" с использованием XML реализовать значительно сложнее, чем с использованием EAV. В последнем случае (для нашей реализации EAV) это решается одним простым запросом с использованием реляционного деления. Причем запрос один и тот же для любых атрибутов (просто он реализуется для SQL Server, для других СУБД может быть и сложнее). Конечно, здесь я имею в виду запросы с проверкой значений атрибутов только на равенство. Запросы типа "Найти все мониторы с дигональю от 17 до 21 дюйма" будут реализовываться сложнее. Хотя и в этом случай реализация с EAV будет проще реализации с XML. Хотя, вроде бы, в последней версии SQL Server (наш проект разрабатывался под SQL Server 2008) появились средства для индексирования XML-полей и быстрого поиска в них (но я в пока еще не разобрался, так что сказать ничего не могу). Я использую Mysql. А если у меня условия храняться в виде: Значение поля Оператор сравнеия Значение, которые доспустим хранить в виде XML или JSON в БД. То есть извлечь строковое поле и преобразовать в массив, пробежаться по нему для проверки условий? Но в это случае труднее выполнять проверку целостности данных. И не факт, что обработка на PHP в этом случае была бы быстрее чем запрос с объединением таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 17:13 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Постройте таблицу в котором храните дерево групп, подгрупп и таблицы с атрибутами всё можно сделать через таблицы в 4-6 норм форме акаунты, таблица люди и тд, постройте индексы и всё будет летать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 17:15 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
NemoxurПостройте таблицу в котором храните дерево групп, подгрупп и таблицы с атрибутами всё можно сделать через таблицы в 4-6 норм форме акаунты, таблица люди и тд, постройте индексы и всё будет летать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 17:23 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
NemoxurПостройте таблицу в котором храните дерево групп, подгрупп и таблицы с атрибутами всё можно сделать через таблицы в 4-6 норм форме акаунты, таблица люди и тд, постройте индексы и всё будет летать Я подумаю, можно ли хранить группы и подгруппы в одной таблице. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 17:24 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Но в любом случае хранение двух типов условий в таблице segment_conditions кажется не очень красивым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 17:25 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
OLEG_2005 Я использую Mysql. А если у меня условия храняться в виде: Значение поля Оператор сравнеия Значение, которые доспустим хранить в виде XML или JSON в БД. То есть извлечь строковое поле и преобразовать в массив, пробежаться по нему для проверки условий? Это будет сложнее и медленнее, чем с использованием SQL-запросов (хотя я и не знаком с последними веяниями в области обработки XML в современных СУБД - вполне может статься, что SQL Server позволяет это сделать просто). OLEG_2005Но в это случае труднее выполнять проверку целостности данных. Совершенно верно. Хотя в случае использования XML можно ассоциировать каждый набор атрибутов со своей XML-схемой и проверять с ее помощью целостность данных (например, при помощи триггера для таблицы, в которой хранятся значения атрибутов). Это можно реализовать для SQL Server, хотя я еще не знаю, насколько это трудоемко (собираюсь осуществить case study по этому поводу). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 17:34 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Flying Dutchman, Насколько я знаю, в mysql работа не таких средств для работы с xml, как в MS SQL Server. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2010, 20:36 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
NemoxurПостройте таблицу в котором храните дерево групп, подгрупп и таблицы с атрибутами всё можно сделать через таблицы в 4-6 норм форме акаунты, таблица люди и тд, постройте индексы и всё будет летать Честно говоря, ваша идея объединение групп/подгрупп в одну таблице и указание в этом случае какой входит ли подписчик в подгруппу не совсем понятна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 10:06 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Может быть кто-нибудь видел open source решение, где реализуется подобная функциональность сегиментации данных, когда есть набор атрибутов как постоянных, так и заданных пользователем и сегмент формируется наборо условий проверки. Интересно было бы посмотреть, как реализуют подобную функциональность. Судя по всему, скрипт, запущенный в сron будеть смотреть неотравленные кампании и выбирать подписчиков, которые удовлетворяют некоторому условию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 11:26 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Так же можно предположить, что семнентация данных будет применяться не всегда и может быть не так часто. Также вполне можно предположить, что не все списки будут иметь заданные пользователем поля. Но возможность сегментации и создания опреленных пользователем полей быть должна. Условия в сегментах двух типов: Значение Поле (общее для всех списков или специфичное для данного списка) - Оператор сравнения - Значение Группы Оператор (входит в одну из подгрупп, во все, ни в одну) Подгруппы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 11:33 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Мне кажется понятие группы/подгруппы эквивалентно в общем типу данных Checkbox. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2010, 16:02 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Нашел коммерческую систему Interspire, построенную на Open Source. Глянул на их БД, они активно используют паттерн Serialized LOB. Вот пример таблиц сегментов, условия проверки для подписчиков хранятся в виде текста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 11:34 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 11:35 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 11:36 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Причем интересно, что используют они для это функцию сериализации PHP, данные распаковываются в массив PHP. Решение кажется странным, так как, например, обрабатывть данные на чем-нибудь кроме PHP в этом случае очень непросто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 11:38 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Описание типов данных в сисетме также задается строкой, сериализованным массив PHP. Причем, как я понял типы данных бывают как глобальные, так и локальные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 11:46 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Скриншот с таблицами с типами данных: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2010, 11:52 |
|
||
|
хранение списка объектов с полями, заданными пользователями и условий их выбор
|
|||
|---|---|---|---|
|
#18+
Flying DutchmanOLEG_2005В книге есть фраза, что системы с использование EAV где-то через год становятся громоздкими. Может ли кто-нибудь прокомментировать данное утверждение? "Становятся громоздкими" - какое-то расплывчатое утверждение. Одни проекты становятся громоздкими, другие нет. Я недавно учавствовал в проекте по разработке веб-магазинов, в котором мы использовали EAV для хранения атрибутов различных товаров. Конечно, с EAV несколько медленнее, чем без него из-за более сложной структуры БД, но в нашем случае скорость работы была удовлетворительной. Использование XML для хранения атрибутов было бы проще, но в этом случае возникли бы проблемы с поиском. Например, запрос такого вида: "Найти всю обувь марки Ferragamo черного цвета размера 44" с использованием XML реализовать значительно сложнее, чем с использованием EAV. В последнем случае (для нашей реализации EAV) это решается одним простым запросом с использованием реляционного деления. Причем запрос один и тот же для любых атрибутов (просто он реализуется для SQL Server, для других СУБД может быть и сложнее). Конечно, здесь я имею в виду запросы с проверкой значений атрибутов только на равенство. Запросы типа "Найти все мониторы с дигональю от 17 до 21 дюйма" будут реализовываться сложнее. Хотя и в этом случай реализация с EAV будет проще реализации с XML. Хотя, вроде бы, в последней версии SQL Server (наш проект разрабатывался под SQL Server 2008) появились средства для индексирования XML-полей и быстрого поиска в них (но я в пока еще не разобрался, так что сказать ничего не могу). А если нужно извлечть двадцать атрибутов при использовании EAV, то нужно сделать 20 объединений, не будет ли это непримлимо медленным решением. Похоже с ростом количества атрибутов быстродействие запроса будет падать очень быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2010, 22:35 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1542501]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
262ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 555ms |

| 0 / 0 |
