|
|
|
Каким образом лучше хранить набор данных, который будет меняться.
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=34336637&tid=1544721]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
| others: | 249ms |
| total: | 533ms |

| 0 / 0 |
