|
|
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Добрый день. При разработке информационной системы возник очень "щепетильный" вопрос, а точнее проблема, и заключается она вот в чем. В системе есть набор объектов, который имеет определенные параметры. Информация о каждом параметре представлена в виде 3 характеристик: 1. Название параметра 2. Значение 3. Видимость параметра. Если бы у объекта количество этих параметров было бы фиксированно, то можно было бы хранить каждый в отдельном поле. Но проблема заключается как раз в том, что количество параметров может меняться. Естественно создавать новый поля для существующих таблиц не приемлемый вариант, да и к тому же потом менять клиент, который будет работать с базой этих объектов тоже нельзя. Собственно вопрос заключается в следующем: В каком виде, можно хранить такую информацию, чтобы соблюдалось несколько условий: 1. Количество параметров может меняться, причем меняться для всех объектов, существующих в системе. 2. Должна обеспечиваться простота выборки и редактирования существующих параметров. 3. Производительность должна быть на высоком уровне при обработке множества объектов. ? з.ы. Расматриваются 2 варианта: 1. Хранить все в виде xml в поле типа xml (SQL Server 2005). 2. Создавать отдельную таблицу со структурой object_id, param_name, param_value, is_visible. Какие будут рекомендации?!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:22 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
raptor@x-plat.ruДобрый день. При разработке информационной системы возник очень "щепетильный" вопрос, а точнее проблема, и заключается она вот в чем. В системе есть набор объектов, который имеет определенные параметры. Информация о каждом параметре представлена в виде 3 характеристик: 1. Название параметра 2. Значение 3. Видимость параметра. Если бы у объекта количество этих параметров было бы фиксированно, то можно было бы хранить каждый в отдельном поле. Но проблема заключается как раз в том, что количество параметров может меняться. Естественно создавать новый поля для существующих таблиц не приемлемый вариант, да и к тому же потом менять клиент, который будет работать с базой этих объектов тоже нельзя. Собственно вопрос заключается в следующем: В каком виде, можно хранить такую информацию, чтобы соблюдалось несколько условий: 1. Количество параметров может меняться, причем меняться для всех объектов, существующих в системе. 2. Должна обеспечиваться простота выборки и редактирования существующих параметров. 3. Производительность должна быть на высоком уровне при обработке множества объектов. ? з.ы. Расматриваются 2 варианта: 1. Хранить все в виде xml в поле типа xml (SQL Server 2005). 2. Создавать отдельную таблицу со структурой object_id, param_name, param_value, is_visible. Какие будут рекомендации?!! Я склоняюсь ко второму варианту в несколько видоизмененной форме: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:29 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Станислав С raptor@x-plat.ruДобрый день. При разработке информационной системы возник очень "щепетильный" вопрос, а точнее проблема, и заключается она вот в чем. В системе есть набор объектов, который имеет определенные параметры. Информация о каждом параметре представлена в виде 3 характеристик: 1. Название параметра 2. Значение 3. Видимость параметра. Если бы у объекта количество этих параметров было бы фиксированно, то можно было бы хранить каждый в отдельном поле. Но проблема заключается как раз в том, что количество параметров может меняться. Естественно создавать новый поля для существующих таблиц не приемлемый вариант, да и к тому же потом менять клиент, который будет работать с базой этих объектов тоже нельзя. Собственно вопрос заключается в следующем: В каком виде, можно хранить такую информацию, чтобы соблюдалось несколько условий: 1. Количество параметров может меняться, причем меняться для всех объектов, существующих в системе. 2. Должна обеспечиваться простота выборки и редактирования существующих параметров. 3. Производительность должна быть на высоком уровне при обработке множества объектов. ? з.ы. Расматриваются 2 варианта: 1. Хранить все в виде xml в поле типа xml (SQL Server 2005). 2. Создавать отдельную таблицу со структурой object_id, param_name, param_value, is_visible. Какие будут рекомендации?!! Я склоняюсь ко второму варианту в несколько видоизмененной форме: Код: plaintext 1. 2. Не пойдет каждый объект имеет свое значение is_visible :) тогда вот так Параметры (param_id, param_name) Значения (object_id, param_id, param_value, is_visible) здесь получается нужно хранить много информации, а хотелось бы обойтись минимальными издержками при связывании таблиц. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:33 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
raptor@x-plat.ruРасматриваются 2 варианта: 1. Хранить все в виде xml в поле типа xml (SQL Server 2005). 2. Создавать отдельную таблицу со структурой object_id, param_name, param_value, is_visible. Какие будут рекомендации?!! Подобные вопросы не раз тут обсуждались. Оба варианта имеют существенные недостатки. Например, отсутствует типизация параметров. Точнее ее можно реализовать но не средствами СУБД, а средствами приложения. Большие проблемы и с поиском по значениям параметров. С xml это вообще под снег, а во втором случае это можно сделать ззапросом, но запрос, который ищет объект по значениям пяти параметров уже тяжеловат для оптимизации. Если количество параметров меняется не так часто и есть возможность типизировать объекты по количеству и видам параметров, то лучше в динамике создавать таблички и добавлять/удалять колонки. В этом случае есть возможность их избирательно индексировать, навешивать ограничения и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:36 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
аналогичную задачу всегда решал таким способом: 1. Табл. объектов (OBJ_ID, OBJ_NAME...) 2. Справочник свойств (PARAM_ID,PARAM_NAME) 3. Свойства объектов (FID_OBJ,FID_PARAM,VALUE) Оговорюсь что работало на умеренных объемах данных (типа НСИ и т.п.) Явным плюсом считаю: 1. Не требуется изменения структуры БД 2. Если нормально написан клиентский софт, не нужны его доработки при изменении справочника свойств Естественно, такая структура имеет смысл только для "подвижной" и долгоживущей задачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:37 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey raptor@x-plat.ruРасматриваются 2 варианта: 1. Хранить все в виде xml в поле типа xml (SQL Server 2005). 2. Создавать отдельную таблицу со структурой object_id, param_name, param_value, is_visible. Какие будут рекомендации?!! Подобные вопросы не раз тут обсуждались. Оба варианта имеют существенные недостатки. Например, отсутствует типизация параметров. Точнее ее можно реализовать но не средствами СУБД, а средствами приложения. Большие проблемы и с поиском по значениям параметров. С xml это вообще под снег, а во втором случае это можно сделать ззапросом, но запрос, который ищет объект по значениям пяти параметров уже тяжеловат для оптимизации. Если количество параметров меняется не так часто и есть возможность типизировать объекты по количеству и видам параметров, то лучше в динамике создавать таблички и добавлять/удалять колонки. В этом случае есть возможность их избирательно индексировать, навешивать ограничения и т.п. авторэто вообще под снег Что это значит?!! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:39 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Tyo Явным плюсом считаю: 1. Не требуется изменения структуры БД 2. Если нормально написан клиентский софт, не нужны его доработки при изменении справочника свойств С первым плюсом согласен, хотя и не разделяю боязни по изменению структуры БД. А вот второй - не понятен. Если нормально написан клиентский софт (то есть он ориентирован на то, что список свойств будет меняться), то при любом способе физического хранения свойств его доработки не потребуются. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:41 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey Если количество параметров меняется не так часто и есть возможность типизировать объекты по количеству и видам параметров, то лучше в динамике создавать таблички и добавлять/удалять колонки. В этом случае есть возможность их избирательно индексировать, навешивать ограничения и т.п. Правильно я понимаю что в таком случае приклад каждый раз докручивать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:41 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
raptor@x-plat.ru авторэто вообще под снег Что это значит?!! :) Это значит, что дожидаться результатов поиска по значениям свойств, упрятанных в xml-строку можно вплоть до выпадения первого снега. :) В последнее время, конечно же случились подвижки по части работы с xml в некоторых СУБД. Но боюсь, что на времени выполнения поисковых запросов это мало скажется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:44 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
raptor@x-plat.ru Не пойдет каждый объект имеет свое значение is_visible :) тогда вот так Параметры (param_id, param_name) Значения (object_id, param_id, param_value, is_visible) здесь получается нужно хранить много информации, а хотелось бы обойтись минимальными издержками при связывании таблиц. Это была просто декомпозиция/нормализация предложенной таблицы. Информации здесь будет нисколько не больше, чем в денормализованной (=первоначально предложенной) таблице. В денормализованной таблице будут наблюдаться помимо аномалий обновления трудноуловимые ошибки, связанные с тем, что человек должен будет для одинаковых параметров для разных изделий снова и снова руками писать название. И в этом случае ошибиться легче, чем при выборе значения из справочника. Например, один оператор напишет "длина", другой - "длинНа", третий - "длЕна". Потом замаетесь эти ошибки разгребать и унифицировать наименования парамтров.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:45 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Станислав С raptor@x-plat.ru Не пойдет каждый объект имеет свое значение is_visible :) тогда вот так Параметры (param_id, param_name) Значения (object_id, param_id, param_value, is_visible) здесь получается нужно хранить много информации, а хотелось бы обойтись минимальными издержками при связывании таблиц. Это была просто декомпозиция/нормализация предложенной таблицы. Информации здесь будет нисколько не больше, чем в денормализованной (=первоначально предложенной) таблице. В денормализованной таблице будут наблюдаться помимо аномалий обновления трудноуловимые ошибки, связанные с тем, что человек должен будет для одинаковых параметров для разных изделий снова и снова руками писать название. И в этом случае ошибиться легче, чем при выборе значения из справочника. Например, один оператор напишет "длина", другой - "длинНа", третий - "длЕна". Потом замаетесь эти ошибки разгребать и унифицировать наименования парамтров.... Да это все понятно... я просто вас немного подравил, в рамках своей задачи. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:47 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Tyo Правильно я понимаю что в таком случае приклад каждый раз докручивать? Если приложение написано нормально, то не надо ничего "докручивать". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:50 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Господа тема сейчас не про приложение, а про данные... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:51 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
raptor@x-plat.ruГоспода тема сейчас не про приложение, а про данные... Хь. Но Вам же вряд ли нужны данные сами по себе, вы же наверное собираетесь их предоставлять юзеру через какой-то приклад? Или юзер сам будет рыться в них SQL-ем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 14:57 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
raptor@x-plat.ruГоспода тема сейчас не про приложение, а про данные... Если Bogdanov Andreyесть возможность типизировать объекты по количеству и видам параметров, то список типов объектов: table Types(TypeId integer) список свойств объектов: table Props(PropId integer,Name char,Table_name char,Column_Name char,<описание типа данных и т.п.>) использование свойств типами: table PropUse(PropId integer,TypeId integer) При добавлении нового свойства в таблицу Props автоматически создается таблица Table_name(ObjId integer, Column_Name char) Если таблица уже есть, то в нее добавляется колонка. Зная тип объекта, сформировать запрос, который вытащит значения всех свойств - не проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 15:01 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey raptor@x-plat.ruГоспода тема сейчас не про приложение, а про данные... Если Bogdanov Andreyесть возможность типизировать объекты по количеству и видам параметров, то список типов объектов: table Types(TypeId integer) список свойств объектов: table Props(PropId integer,Name char,Table_name char,Column_Name char,<описание типа данных и т.п.>) использование свойств типами: table PropUse(PropId integer,TypeId integer) При добавлении нового свойства в таблицу Props автоматически создается таблица Table_name(ObjId integer, Column_Name char) Если таблица уже есть, то в нее добавляется колонка. Зная тип объекта, сформировать запрос, который вытащит значения всех свойств - не проблема. Спасибо. То что нужно! :)! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 15:25 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
raptor@x-plat.ruНо проблема заключается как раз в том, что количество параметров может меняться. Естественно создавать новый поля для существующих таблиц не приемлемый вариант, да и к тому же потом менять клиент, который будет работать с базой этих объектов тоже нельзя. Если структура базы (в вашей озвучке ++ атрибуты таблиц) меняются не через день, а редко и очень обоснованно, то почему "создавать новый поля для существующих таблиц не приемлемый вариант"? Клиента менять не придется, если он сразу будет извлекать данные о полях из системных метаданных. Мы так и делаем. Используем системные метаданные и плюс еще завели свои дополнительные. Зато имеем все прелести нормальной структуры БД: производительность, констрейнты, нормальная настройка прав доступа, нормальные запросы, триггеры... Добиться всего этого при структурах типа EAV сложновато, если вообще возможно. EAV все же для совершенно хаотически и часто меняющейся структуры придуман. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 16:02 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mir raptor@x-plat.ruНо проблема заключается как раз в том, что количество параметров может меняться. Естественно создавать новый поля для существующих таблиц не приемлемый вариант, да и к тому же потом менять клиент, который будет работать с базой этих объектов тоже нельзя. Если структура базы (в вашей озвучке ++ атрибуты таблиц) меняются не через день, а редко и очень обоснованно, то почему "создавать новый поля для существующих таблиц не приемлемый вариант"? Клиента менять не придется, если он сразу будет извлекать данные о полях из системных метаданных. Мы так и делаем. Используем системные метаданные и плюс еще завели свои дополнительные. Зато имеем все прелести нормальной структуры БД: производительность, констрейнты, нормальная настройка прав доступа, нормальные запросы, триггеры... Добиться всего этого при структурах типа EAV сложновато, если вообще возможно. EAV все же для совершенно хаотически и часто меняющейся структуры придуман. Сам клиент не будет извлекать данные - они ему будут web-сервисом передаваться. А свойства будут добавляться совершенно неизвестно когда как и сколько. Мало того после публикации этого поста еще добавилось 1 условие в задании, что конкретному объекту можно добавить свое поле, которого не будет у других. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 16:48 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mirЕсли структура базы (в вашей озвучке ++ атрибуты таблиц) меняются не через день, а редко и очень обоснованно, то почему "создавать новый поля для существующих таблиц не приемлемый вариант"? ... Для добавления колонки в любом случае нужен исключительный доступ к таблице. Не во всех случаях это подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2007, 20:54 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
raptor@x-plat.ruСам клиент не будет извлекать данные - они ему будут web-сервисом передаваться. А свойства будут добавляться совершенно неизвестно когда как и сколько. Мало того после публикации этого поста еще добавилось 1 условие в задании, что конкретному объекту можно добавить свое поле, которого не будет у других.Если не сложно, опишите, что за задача этого требует, мне познавательно будет. Попробуйте все же не полностью на EAV переходить, а делать таблицы с базовым набором полей (даже с запасом), а дополнительные, динамически добавляемые поля уже хранить в отдельной структуре. SergGol mirЕсли структура базы (в вашей озвучке ++ атрибуты таблиц) меняются не через день, а редко и очень обоснованно, то почему "создавать новый поля для существующих таблиц не приемлемый вариант"? ...Для добавления колонки в любом случае нужен исключительный доступ к таблице. Не во всех случаях это подходит.А что, поля добавляет пользователь в ран-тайме? Тада конечно. Но я говорил о другом случае, когда это -- задача административного характера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 08:03 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mir raptor@x-plat.ruСам клиент не будет извлекать данные - они ему будут web-сервисом передаваться. А свойства будут добавляться совершенно неизвестно когда как и сколько. Мало того после публикации этого поста еще добавилось 1 условие в задании, что конкретному объекту можно добавить свое поле, которого не будет у других.Если не сложно, опишите, что за задача этого требует, мне познавательно будет. Попробуйте все же не полностью на EAV переходить, а делать таблицы с базовым набором полей (даже с запасом), а дополнительные, динамически добавляемые поля уже хранить в отдельной структуре. SergGol mirЕсли структура базы (в вашей озвучке ++ атрибуты таблиц) меняются не через день, а редко и очень обоснованно, то почему "создавать новый поля для существующих таблиц не приемлемый вариант"? ...Для добавления колонки в любом случае нужен исключительный доступ к таблице. Не во всех случаях это подходит.А что, поля добавляет пользователь в ран-тайме? Тада конечно. Но я говорил о другом случае, когда это -- задача административного характера. Смогу рассказать о задаче после марта месяца. Пока не могу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 13:19 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mirПопробуйте все же не полностью на EAV переходить, а делать таблицы с базовым набором полей (даже с запасом), а дополнительные, динамически добавляемые поля уже хранить в отдельной структуре. Я ту немного это дело проанализировал - часто невозможно классифицировать сущности. Следовательно, в форме ЭАВ надо бы хранить атрибуты сущностей. А вот атрибуты отношений почти не меняются и частота доступа к ним большая, да и вся логика программы обычно на отношених. Тут надо все держать в жестких таблицах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 16:03 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mirА что, поля добавляет пользователь в ран-тайме? Тада конечно. Но я говорил о другом случае, когда это -- задача административного характера. Ну если атрибуты плодятся конечным пользователембезо всякого контроля, то тогда, конечно, лучше EAV использовать. В моей практике атрибуты добавлялись все-таки не конечными пользователями, а особо одаренными их представителями - аналитиками и настройщиками. И эти атрибуты были не просто "свалкой" информации, а играли какую-то роль в бизнес-процессе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 22:02 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey mirА что, поля добавляет пользователь в ран-тайме? Тада конечно. Но я говорил о другом случае, когда это -- задача административного характера. Ну если атрибуты плодятся конечным пользователембезо всякого контроля, то тогда, конечно, лучше EAV использовать. В моей практике атрибуты добавлялись все-таки не конечными пользователями, а особо одаренными их представителями - аналитиками и настройщиками. И эти атрибуты были не просто "свалкой" информации, а играли какую-то роль в бизнес-процессе. Аналитики и настройщики такие же пользователи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2007, 23:06 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов Аналитики и настройщики такие же пользователи. Ну все-таки не совсем "такие же". Эти люди обепечивают технологию работы и использования системы в работе. И посему имеют дело не с отдельными экземплярами, а с группами экземпляров. Простые же пользователи (операторы) работают именно с отдельными экземплярами. Так вот если, модификацией атрибутики занимаются первые, то делают они для целых групп (классов) объектов. Ну а если модифицировать атрибутику должны вторые, то это значит, что собственный набор атрибутов будет у каждого объекта. Соответственно и способ реализации требуется разный. Наример, технолог может решить, что в накладной надо указывать скажем ФИО водителя - он добавит новое поле и это поле будет у всех накладных. Другое дело, если оператор вдруг решил сам добавить в документ какую-то дополнительную информацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2007, 20:21 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyНаример, технолог может решить, что в накладной надо указывать скажем ФИО водителя - он добавит новое поле и это поле будет у всех накладных.Если анализ показал, что у всех накладных должно быть поле "ФИО водителя", почему бы не добавить его в структуру таблицы? Я в том смысле, что пытаюсь нащупать те критерии, по которым уже реально нужен EAV, а стандартная технология не применима. Все же трудно спорить, что EAV-модель влечет много неудобств и недостатков, поэтому лепить ее где не попало, видимо, не стоит, не так ли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 07:26 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mir Bogdanov AndreyНаример, технолог может решить, что в накладной надо указывать скажем ФИО водителя - он добавит новое поле и это поле будет у всех накладных.Если анализ показал, что у всех накладных должно быть поле "ФИО водителя", почему бы не добавить его в структуру таблицы? Я в том смысле, что пытаюсь нащупать те критерии, по которым уже реально нужен EAV, а стандартная технология не применима. Все же трудно спорить, что EAV-модель влечет много неудобств и недостатков, поэтому лепить ее где не попало, видимо, не стоит, не так ли? Ну так я о том и говорю, что добавление полей не простыми пользователями, а "аналитиками" - процесс гораздо более отвественный. Для таких случаев правильное решение - модифицировать структуру данных. А EAV нужно использовать тогда, когда изменение атрибутного состава производится совершенно "бесконтрольно" и никакая типизация - невозможна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 09:26 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
raptor@x-plat.ruМало того после публикации этого поста еще добавилось 1 условие в задании, что конкретному объекту можно добавить свое поле, которого не будет у других.Что значит не будет у других? Попытка добавить это поле другому объекту должна категорически пресекаться? Или просто процент его заполнения очень мал? Или это "личное" поле, и значения ему может присваивать только тот, кто его создал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 13:33 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
raptor@x-plat.ruСам клиент не будет извлекать данные - они ему будут web-сервисом передаваться. А свойства будут добавляться совершенно неизвестно когда как и сколько. Мало того после публикации этого поста еще добавилось 1 условие в задании, что конкретному объекту можно добавить свое поле, которого не будет у других. Я бы начал с выяснения того "когда как и сколько" будет добавлятся атрибутов, поскольку постановка "совершенно неизвестно" неверна в корне. Разработчик системы должен это знать, иначе может оказаться, что ряд важных способов добавления не реализован, а те что реализованы нафиг не нужны. Ответ на вопрос "сколько" тоже очень важен. Может быть каждый объект имеет уникальный класс (как раз то условие, которое добавилось). Тут скорее XML в помощь. Современные СУБД с поддержкой XML запросов как нибудь с этими данными справятся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 14:06 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyА EAV нужно использовать тогда, когда изменение атрибутного состава производится совершенно "бесконтрольно" и никакая типизация - невозможна. EAV реализовать поразному можно. XML это тоже реализация EAV. ИМХО, динамическая типизация возможна всегда. Вопрос в том, что "совершенно "бесконтрольно"", означает, что семантика новых типов будет известна только её автору. Зачем делать централизованное хранилище данных, если у каждого своя песочница? Похоже автор темы пока ещё не сформулировал бизнес требования к системе, но уже пытается искать технические решения самого общего плана. Скорее всего, классов/сущностей просто очень много и время от времени будут появляться новые классы, но это не повод закладывать в систему абсолютную изменчивость. По крайней мере процедуры определения нового класса/сущности должны быть регламентированы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 14:23 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey Сахават Юсифов Аналитики и настройщики такие же пользователи. Ну все-таки не совсем "такие же". Эти люди обепечивают технологию работы и использования системы в работе. И посему имеют дело не с отдельными экземплярами, а с группами экземпляров. Простые же пользователи (операторы) работают именно с отдельными экземплярами. Так вот если, модификацией атрибутики занимаются первые, то делают они для целых групп (классов) объектов. Ну а если модифицировать атрибутику должны вторые, то это значит, что собственный набор атрибутов будет у каждого объекта. Соответственно и способ реализации требуется разный. Наример, технолог может решить, что в накладной надо указывать скажем ФИО водителя - он добавит новое поле и это поле будет у всех накладных. Другое дело, если оператор вдруг решил сам добавить в документ какую-то дополнительную информацию. Потому и есть разделение. Атрибуты на уровне типа вводят одни, а на уровне объекта другие (права). Т.е. - можно добавить "Цвет" типу "Материал", тогда при генерации объекта всегда будет предложено заполнить значение "Цвет". Но оператор может послать это дело и просто удалить "цвет" у конкретного объекта и/или добавить атрибут "процент сырости" который в списке атрибутов типа не значится, но имеется в домене атрибутов (доступ конечно тоже по правам). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 15:25 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов Потому и есть разделение. Атрибуты на уровне типа вводят одни, а на уровне объекта другие (права). Вопрос все-таки не в правах, а в способе реализации. Я утверждал, что способ реализации у этих атрибутов должен быть разный. Ну а права - это уже отдельная песня. PS. Я пока никак не могу представить себе приложение в котором создание произвольных атрибутов операторами востребовано. Хотя вполне допускаю, что мне просто не приходилось с таким сталкиваться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 16:41 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey PS. Я пока никак не могу представить себе приложение в котором создание произвольных атрибутов операторами востребовано. Хотя вполне допускаю, что мне просто не приходилось с таким сталкиваться. Да возмите, например, самый такой востребованный справочник - справочник материалов и ПКИ (или там как говорят "Номенклатурные позиции"). У "Доска" - "материал", "ширина", "длина", "высота", "коэффициент сырости"... У "Краски" - "тип", "цвет",.. У "Двигателя" - "мощность",.. у "Коробки" - "передаточное число",.. у "Штаны" - "количество карманов" Когда мы это дело только учитываем, то эти атрибуты вроде и не нужны. Но, когда мы собираемся это дела производить, получается совсем другой коленкор. Если все это объединить, то получится справочник с сотнями атрибутов. А если не объединить, то сотни справочников. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 16:58 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов Да возмите, например, самый такой востребованный справочник - справочник материалов и ПКИ (или там как говорят "Номенклатурные позиции"). У "Доска" - "материал", "ширина", "длина", "высота", "коэффициент сырости"... У "Краски" - "тип", "цвет",.. У "Двигателя" - "мощность",.. у "Коробки" - "передаточное число",.. у "Штаны" - "количество карманов" Когда мы это дело только учитываем, то эти атрибуты вроде и не нужны. Но, когда мы собираемся это дела производить, получается совсем другой коленкор. Если все это объединить, то получится справочник с сотнями атрибутов. А если не объединить, то сотни справочников. Замечательно. Вы сами привели типизацию своих объектов по количеству используемых атрибутов. Имеем тип "Штаны" с такими-то атрибутами, тип "Коробки" - с другими. Для разных типов - разные таблицы хранения атрибутов. Не вижу сложностей. Если вы собираетесь как-то использовать в системе эти атрибуты, то вам все-равно придется научится их программно идентифицировать. Если же они хранятся просто так, то все это можно назвать одним атрибутом "Описание изделия". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 17:38 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey Сахават Юсифов Да возмите, например, самый такой востребованный справочник - справочник материалов и ПКИ (или там как говорят "Номенклатурные позиции"). У "Доска" - "материал", "ширина", "длина", "высота", "коэффициент сырости"... У "Краски" - "тип", "цвет",.. У "Двигателя" - "мощность",.. у "Коробки" - "передаточное число",.. у "Штаны" - "количество карманов" Когда мы это дело только учитываем, то эти атрибуты вроде и не нужны. Но, когда мы собираемся это дела производить, получается совсем другой коленкор. Если все это объединить, то получится справочник с сотнями атрибутов. А если не объединить, то сотни справочников. Замечательно. Вы сами привели типизацию своих объектов по количеству используемых атрибутов. Имеем тип "Штаны" с такими-то атрибутами, тип "Коробки" - с другими. Для разных типов - разные таблицы хранения атрибутов. Не вижу сложностей. Если вы собираетесь как-то использовать в системе эти атрибуты, то вам все-равно придется научится их программно идентифицировать. Если же они хранятся просто так, то все это можно назвать одним атрибутом "Описание изделия". Да этих типов - сотни, если не тысячи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 17:57 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyДля разных типов - разные таблицы хранения атрибутов. Это не единственный способ. Можно разнотипные объекты хранить в одной таблице и даже под группу разных атрибутов использовать одно поле. Другое дело, насколько удобно будет работать с таким хашем. Кроме того процедура определения такой таблицы весьма нетривиальная. Так что проще всего под Штаны и Двигатели создавать разные таблицы, а слить их до кучи можно всегда. Есть ещё момент, когда прекратить классификацию. Двигатели бывают электрические, паровые, внутреннего сгорания, гужевые и т.д.:o). Далее дизельные, карбюраторные, инжекторные. Турбинные или поршневые. Коллекторные, асинхронные, и д.р. Положим, у нас есть паровые двигатели, стоит ли создавать подклассы Турбинные, Поршневые, Реактивные или лучше в классе Паровых двигателей определить атрибут принцип действия, который будет являться дискриминатором типа? Если использовать дискриминатор, то мы приходим к тому, что в одной таблице фактически будут храниться разнотипные объекты с общим суперклассом. Сегодня нам достаточно знать о двигателях только принцип действия, завтра нужно будет знать количество и размеры цилиндров, материал турбины, диаметр сопла, расход пара и т.д. Тут напрашивается создание отдельных таблиц и миграция данных. Или использовать "Описание изделия". Подход "Описание изделия" не противоречит и созданию таблицы EAV, если она понадобится хотя бы как инвертированный файл для контекстного поиска, но управление этим индексом лучше поручить СУБД. В общем XML и встроенные в СУБД механизмы трансформации данных и контекстного поиска, это мощное оружие в решении задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 18:33 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mcureenab Bogdanov AndreyДля разных типов - разные таблицы хранения атрибутов. Это не единственный способ. Можно разнотипные объекты хранить в одной таблице и даже под группу разных атрибутов использовать одно поле. Другое дело, насколько удобно будет работать с таким хашем. Кроме того процедура определения такой таблицы весьма нетривиальная. Так что проще всего под Штаны и Двигатели создавать разные таблицы, а слить их до кучи можно всегда. Мы вообще не знаем, будут там "штаны" или "Двигатель" или нет. Как только решили что вмество "Ручки для толкания :)" будем использовать "Двигатель" появляется нужда в двигательях. Неужто, сразу надо создать новую таблицу? [quot mcureenab] Есть ещё момент, когда прекратить классификацию. Двигатели бывают электрические, паровые, внутреннего сгорания, гужевые и т.д.:o). Далее дизельные, карбюраторные, инжекторные. Турбинные или поршневые. Коллекторные, асинхронные, и д.р. Положим, у нас есть паровые двигатели, стоит ли создавать подклассы Турбинные, Поршневые, Реактивные или лучше в классе Паровых двигателей определить атрибут принцип действия, который будет являться дискриминатором типа? Если использовать дискриминатор, то мы приходим к тому, что в одной таблице фактически будут храниться разнотипные объекты с общим суперклассом. Сегодня нам достаточно знать о двигателях только принцип действия, завтра нужно будет знать количество и размеры цилиндров, материал турбины, диаметр сопла, расход пара и т.д. Тут напрашивается создание отдельных таблиц и миграция данных. Или использовать "Описание изделия". [quot mcureenab] А почему мы должны прекращать классификацию? Просто надо дать возможность ввести новый классификатор или подклассы в существующий. Что Вы подразумевате под "Описание изделия"? Изделие имеет собственные атрибуты, а спецификации собственные. Некоторые атрибуты изделия наследуются от спецификаций, некоторые от процесса изготовления, некоторые приобретенные. Я вот пытаюсь сейчас такую вещь сварганить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 19:10 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовА почему мы должны прекращать классификацию? Просто надо дать возможность ввести новый классификатор или подклассы в существующий. классификатор = атрибут или новое значение в домене? Пусть будет такая возможность, но рано или поздно нужно прекратить наращивать дерево классов и сосредоточится на их доменных атрибутах. Думаю, решение задачи останова и вообще принцип классификации будет зависеть от субъективных предпочтений пользователя, а это не очень хорошо. Кроме того, как я подозреваю, количество классов будет не многим меньше количества объектов. Похоже, направление строгой классификации и типизации в данном случае тупиковое. Нужно просто описывать атрибуты каждого конкретного объекта, а их классификацию возложить на систему или специалистов в этой области. Сахават ЮсифовЧто Вы подразумевате под "Описание изделия"? Изделие имеет собственные атрибуты, а спецификации собственные. Некоторые атрибуты изделия наследуются от спецификаций, некоторые от процесса изготовления, некоторые приобретенные. "Описание изделия" - атрибут реляционной БД, колонка в таблице. Для наполнения колонки можно использовать формат XML, где каждому тэгу соответствует некоторый атрибут или их группа. Принципы наследования атрибутов от других объектов определяются на уровне приложения. Нужно решить проблему поиска готовых типов, чтобы пользователю каждый раз не приходилось конструировать новый тип с нуля перебирая все существующие домены и оценивая их пригодность для описания изделия. Время от времени придётся причёсывать БД, чтобы исключить опечатки, и прочие ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 19:45 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mcureenab Сахават ЮсифовА почему мы должны прекращать классификацию? Просто надо дать возможность ввести новый классификатор или подклассы в существующий. классификатор = атрибут или новое значение в домене? Пусть будет такая возможность, но рано или поздно нужно прекратить наращивать дерево классов и сосредоточится на их доменных атрибутах. Думаю, решение задачи останова и вообще принцип классификации будет зависеть от субъективных предпочтений пользователя, а это не очень хорошо. Кроме того, как я подозреваю, количество классов будет не многим меньше количества объектов. Похоже, направление строгой классификации и типизации в данном случае тупиковое. Нужно просто описывать атрибуты каждого конкретного объекта, а их классификацию возложить на систему или специалистов в этой области. Классификатор сам по себе. :) У них свои атрибуты из домена атрибутов. Классификация - это как бы добавить атрибуты к существующим объектам скопом. Типа множественнного наследования. Основные атрибуты от типа + классификационные, мягкие атрибуты. Типы и классификаторы могут быть агрегированы. Агрегатные объекты проверяются на соответствующий агрегатный тип. А агрегаты классификационные - дело пользователя. Классификаторы - польностью дело пользователя. Да и типы (кроме некторых для данной предметной области.) Сахават ЮсифовЧто Вы подразумевате под "Описание изделия"? Изделие имеет собственные атрибуты, а спецификации собственные. Некоторые атрибуты изделия наследуются от спецификаций, некоторые от процесса изготовления, некоторые приобретенные. "Описание изделия" - атрибут реляционной БД, колонка в таблице. Для наполнения колонки можно использовать формат XML, где каждому тэгу соответствует некоторый атрибут или их группа. Принципы наследования атрибутов от других объектов определяются на уровне приложения. Нужно решить проблему поиска готовых типов, чтобы пользователю каждый раз не приходилось конструировать новый тип с нуля перебирая все существующие домены и оценивая их пригодность для описания изделия. Время от времени придётся причёсывать БД, чтобы исключить опечатки, и прочие ошибки.[/quot] Ну по хорошему все это будет использовано как часть проги описывающий предметнюю область. Что бы многократно это не делать решил выделить в отдельную часть описания предприятия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2007, 21:02 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Сахават ЮсифовНу по хорошему все это будет использовано как часть проги описывающий предметнюю область. Что бы многократно это не делать решил выделить в отдельную часть описания предприятия. Больше смахивает на инструментарий разработчика, а не на продукт для конечного пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 13:47 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mcureenab Сахават ЮсифовНу по хорошему все это будет использовано как часть проги описывающий предметнюю область. Что бы многократно это не делать решил выделить в отдельную часть описания предприятия. Больше смахивает на инструментарий разработчика, а не на продукт для конечного пользователя. А разьве одна роль отрицает наличие другой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 14:05 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mir SergGol mirЕсли структура базы (в вашей озвучке ++ атрибуты таблиц) меняются не через день, а редко и очень обоснованно, то почему "создавать новый поля для существующих таблиц не приемлемый вариант"? ...Для добавления колонки в любом случае нужен исключительный доступ к таблице. Не во всех случаях это подходит.А что, поля добавляет пользователь в ран-тайме? Тада конечно. Но я говорил о другом случае, когда это -- задача административного характера. А какая разница. Пусть административного. Значит время на администрирование увеличивается. Причем это разные администраторы. Тот, который по БД, вообще будет против каких-то добавлений полей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 14:09 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mcureenab Сахават ЮсифовНу по хорошему все это будет использовано как часть проги описывающий предметнюю область. Что бы многократно это не делать решил выделить в отдельную часть описания предприятия. Больше смахивает на инструментарий разработчика, а не на продукт для конечного пользователя. Разработчика нормативных процессов. А дальше будет автогенерация сети возможных процесов и (при поступлении заказа на производство) и выбор оптимальной подсети для привязка процессов к реальным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 16:51 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Сахават Юсифов mcureenab Сахават ЮсифовНу по хорошему все это будет использовано как часть проги описывающий предметнюю область. Что бы многократно это не делать решил выделить в отдельную часть описания предприятия. Больше смахивает на инструментарий разработчика, а не на продукт для конечного пользователя. Разработчика нормативных процессов. А дальше будет автогенерация сети возможных процесов и (при поступлении заказа на производство) и выбор оптимальной подсети для привязка процессов к реальным. Ресурсам :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 16:53 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
Типа Workflow? Значит тебя "Штаны" и "Двигатели" интересуют не нак объекты учета, а как спецификации? Тогда конечно, создавать таблицу "Штаны" нет никакого смысла, ведь по идее они все одинаковые. Типа, нужна партия товара "Штаны галифе, арт. 12345". В систему заносим спецификацию и запускаем её в workflow. Вопрос, надо ли детализировать что такое "Штаны галифе, арт. 12345", или в пакете технологической документации это уже есть? Видимо, имеет смысл описать из каких деталей состоят штаны, а детали из материалов, указать технологические операции по производству заказу материалов и производству деталей. В итоге от абстрактных атрибутов чего то там непонятного, мы приходим к вполне понятным потокам "Специфкаций изделий", и "Специфкаций операций" в самом общем смысле. Когда дело дойдёт до учета конкретных изделий, тогда можно подумать о создании соответствующих таблиц, но если экземпляры изделий отличаются только №№ партий, то можно учитывать "Партии" в общем смысле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 17:42 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
mcureenabТипа Workflow? Значит тебя "Штаны" и "Двигатели" интересуют не нак объекты учета, а как спецификации? Тогда конечно, создавать таблицу "Штаны" нет никакого смысла, ведь по идее они все одинаковые. Типа, нужна партия товара "Штаны галифе, арт. 12345". В систему заносим спецификацию и запускаем её в workflow. Вопрос, надо ли детализировать что такое "Штаны галифе, арт. 12345", или в пакете технологической документации это уже есть? Видимо, имеет смысл описать из каких деталей состоят штаны, а детали из материалов, указать технологические операции по производству заказу материалов и производству деталей. В итоге от абстрактных атрибутов чего то там непонятного, мы приходим к вполне понятным потокам "Специфкаций изделий", и "Специфкаций операций" в самом общем смысле. Когда дело дойдёт до учета конкретных изделий, тогда можно подумать о создании соответствующих таблиц, но если экземпляры изделий отличаются только №№ партий, то можно учитывать "Партии" в общем смысле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 18:44 |
|
||
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2007, 18:45 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1544721]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
180ms |
get topic data: |
9ms |
get forum data: |
4ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 513ms |

| 0 / 0 |
