powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Каким образом лучше хранить набор данных, который будет меняться.
25 сообщений из 48, страница 1 из 2
Каким образом лучше хранить набор данных, который будет меняться.
    #34336596
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.

Какие будут рекомендации?!!
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336622
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.
Параметры (param_id, param_name, is_visible)
Значения (object_id, param_id, param_value)
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336637
raptor@x-plat.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С 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.
Параметры (param_id, param_name, is_visible)
Значения (object_id, param_id, param_value)


Не пойдет каждый объект имеет свое значение is_visible :)

тогда вот так
Параметры (param_id, param_name)
Значения (object_id, param_id, param_value, is_visible)

здесь получается нужно хранить много информации, а хотелось бы обойтись минимальными издержками при связывании таблиц.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336655
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raptor@x-plat.ruРасматриваются 2 варианта:

1. Хранить все в виде xml в поле типа xml (SQL Server 2005).
2. Создавать отдельную таблицу со структурой object_id, param_name, param_value, is_visible.

Какие будут рекомендации?!!

Подобные вопросы не раз тут обсуждались. Оба варианта имеют существенные недостатки. Например, отсутствует типизация параметров. Точнее ее можно реализовать но не средствами СУБД, а средствами приложения. Большие проблемы и с поиском по значениям параметров. С xml это вообще под снег, а во втором случае это можно сделать ззапросом, но запрос, который ищет объект по значениям пяти параметров уже тяжеловат для оптимизации.
Если количество параметров меняется не так часто и есть возможность типизировать объекты по количеству и видам параметров, то лучше в динамике создавать таблички и добавлять/удалять колонки. В этом случае есть возможность их избирательно индексировать, навешивать ограничения и т.п.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336660
Tyo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аналогичную задачу всегда решал таким способом:
1. Табл. объектов (OBJ_ID, OBJ_NAME...)
2. Справочник свойств (PARAM_ID,PARAM_NAME)
3. Свойства объектов (FID_OBJ,FID_PARAM,VALUE)

Оговорюсь что работало на умеренных объемах данных (типа НСИ и т.п.)
Явным плюсом считаю:
1. Не требуется изменения структуры БД
2. Если нормально написан клиентский софт, не нужны его доработки при изменении справочника свойств

Естественно, такая структура имеет смысл только для "подвижной" и долгоживущей задачи
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336664
raptor@x-plat.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bogdanov Andrey raptor@x-plat.ruРасматриваются 2 варианта:

1. Хранить все в виде xml в поле типа xml (SQL Server 2005).
2. Создавать отдельную таблицу со структурой object_id, param_name, param_value, is_visible.

Какие будут рекомендации?!!

Подобные вопросы не раз тут обсуждались. Оба варианта имеют существенные недостатки. Например, отсутствует типизация параметров. Точнее ее можно реализовать но не средствами СУБД, а средствами приложения. Большие проблемы и с поиском по значениям параметров. С xml это вообще под снег, а во втором случае это можно сделать ззапросом, но запрос, который ищет объект по значениям пяти параметров уже тяжеловат для оптимизации.
Если количество параметров меняется не так часто и есть возможность типизировать объекты по количеству и видам параметров, то лучше в динамике создавать таблички и добавлять/удалять колонки. В этом случае есть возможность их избирательно индексировать, навешивать ограничения и т.п.

авторэто вообще под снег

Что это значит?!! :)
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336675
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tyo
Явным плюсом считаю:
1. Не требуется изменения структуры БД
2. Если нормально написан клиентский софт, не нужны его доработки при изменении справочника свойств

С первым плюсом согласен, хотя и не разделяю боязни по изменению структуры БД. А вот второй - не понятен. Если нормально написан клиентский софт (то есть он ориентирован на то, что список свойств будет меняться), то при любом способе физического хранения свойств его доработки не потребуются.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336678
Tyo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey
Если количество параметров меняется не так часто и есть возможность типизировать объекты по количеству и видам параметров, то лучше в динамике создавать таблички и добавлять/удалять колонки. В этом случае есть возможность их избирательно индексировать, навешивать ограничения и т.п.

Правильно я понимаю что в таком случае приклад каждый раз докручивать?
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336689
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raptor@x-plat.ru
авторэто вообще под снег

Что это значит?!! :)

Это значит, что дожидаться результатов поиска по значениям свойств, упрятанных в xml-строку можно вплоть до выпадения первого снега. :)
В последнее время, конечно же случились подвижки по части работы с xml в некоторых СУБД. Но боюсь, что на времени выполнения поисковых запросов это мало скажется.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336694
raptor@x-plat.ru
Не пойдет каждый объект имеет свое значение is_visible :)

тогда вот так
Параметры (param_id, param_name)
Значения (object_id, param_id, param_value, is_visible)

здесь получается нужно хранить много информации, а хотелось бы обойтись минимальными издержками при связывании таблиц.
Это была просто декомпозиция/нормализация предложенной таблицы. Информации здесь будет нисколько не больше, чем в денормализованной (=первоначально предложенной) таблице.

В денормализованной таблице будут наблюдаться помимо аномалий обновления трудноуловимые ошибки, связанные с тем, что человек должен будет для одинаковых параметров для разных изделий снова и снова руками писать название. И в этом случае ошибиться легче, чем при выборе значения из справочника. Например, один оператор напишет "длина", другой - "длинНа", третий - "длЕна". Потом замаетесь эти ошибки разгребать и унифицировать наименования парамтров....
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336698
raptor@x-plat.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Станислав С raptor@x-plat.ru
Не пойдет каждый объект имеет свое значение is_visible :)

тогда вот так
Параметры (param_id, param_name)
Значения (object_id, param_id, param_value, is_visible)

здесь получается нужно хранить много информации, а хотелось бы обойтись минимальными издержками при связывании таблиц.
Это была просто декомпозиция/нормализация предложенной таблицы. Информации здесь будет нисколько не больше, чем в денормализованной (=первоначально предложенной) таблице.

В денормализованной таблице будут наблюдаться помимо аномалий обновления трудноуловимые ошибки, связанные с тем, что человек должен будет для одинаковых параметров для разных изделий снова и снова руками писать название. И в этом случае ошибиться легче, чем при выборе значения из справочника. Например, один оператор напишет "длина", другой - "длинНа", третий - "длЕна". Потом замаетесь эти ошибки разгребать и унифицировать наименования парамтров....

Да это все понятно... я просто вас немного подравил, в рамках своей задачи. :)
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336709
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tyo
Правильно я понимаю что в таком случае приклад каждый раз докручивать?

Если приложение написано нормально, то не надо ничего "докручивать".
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336712
raptor@x-plat.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа тема сейчас не про приложение, а про данные...
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336732
Tyo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raptor@x-plat.ruГоспода тема сейчас не про приложение, а про данные...

Хь. Но Вам же вряд ли нужны данные сами по себе, вы же наверное собираетесь их предоставлять юзеру через какой-то приклад? Или юзер сам будет рыться в них SQL-ем?
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336753
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)
Если таблица уже есть, то в нее добавляется колонка.

Зная тип объекта, сформировать запрос, который вытащит значения всех свойств - не проблема.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34336848
raptor@x-plat.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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)
Если таблица уже есть, то в нее добавляется колонка.

Зная тип объекта, сформировать запрос, который вытащит значения всех свойств - не проблема.

Спасибо. То что нужно! :)!
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34337021
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raptor@x-plat.ruНо проблема заключается как раз в том, что количество параметров может меняться. Естественно создавать новый поля для существующих таблиц не приемлемый вариант, да и к тому же потом менять клиент, который будет работать с базой этих объектов тоже нельзя.
Если структура базы (в вашей озвучке ++ атрибуты таблиц) меняются не через день, а редко и очень обоснованно, то почему "создавать новый поля для существующих таблиц не приемлемый вариант"? Клиента менять не придется, если он сразу будет извлекать данные о полях из системных метаданных. Мы так и делаем. Используем системные метаданные и плюс еще завели свои дополнительные. Зато имеем все прелести нормальной структуры БД: производительность, констрейнты, нормальная настройка прав доступа, нормальные запросы, триггеры... Добиться всего этого при структурах типа EAV сложновато, если вообще возможно. EAV все же для совершенно хаотически и часто меняющейся структуры придуман.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34337205
raptor@x-plat.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mir raptor@x-plat.ruНо проблема заключается как раз в том, что количество параметров может меняться. Естественно создавать новый поля для существующих таблиц не приемлемый вариант, да и к тому же потом менять клиент, который будет работать с базой этих объектов тоже нельзя.
Если структура базы (в вашей озвучке ++ атрибуты таблиц) меняются не через день, а редко и очень обоснованно, то почему "создавать новый поля для существующих таблиц не приемлемый вариант"? Клиента менять не придется, если он сразу будет извлекать данные о полях из системных метаданных. Мы так и делаем. Используем системные метаданные и плюс еще завели свои дополнительные. Зато имеем все прелести нормальной структуры БД: производительность, констрейнты, нормальная настройка прав доступа, нормальные запросы, триггеры... Добиться всего этого при структурах типа EAV сложновато, если вообще возможно. EAV все же для совершенно хаотически и часто меняющейся структуры придуман.

Сам клиент не будет извлекать данные - они ему будут web-сервисом передаваться. А свойства будут добавляться совершенно неизвестно когда как и сколько. Мало того после публикации этого поста еще добавилось 1 условие в задании, что конкретному объекту можно добавить свое поле, которого не будет у других.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34337808
SergGol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirЕсли структура базы (в вашей озвучке ++ атрибуты таблиц) меняются не через день, а редко и очень обоснованно, то почему "создавать новый поля для существующих таблиц не приемлемый вариант"? ...

Для добавления колонки в любом случае нужен исключительный доступ к таблице. Не во всех случаях это подходит.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34338072
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raptor@x-plat.ruСам клиент не будет извлекать данные - они ему будут web-сервисом передаваться. А свойства будут добавляться совершенно неизвестно когда как и сколько. Мало того после публикации этого поста еще добавилось 1 условие в задании, что конкретному объекту можно добавить свое поле, которого не будет у других.Если не сложно, опишите, что за задача этого требует, мне познавательно будет.
Попробуйте все же не полностью на EAV переходить, а делать таблицы с базовым набором полей (даже с запасом), а дополнительные, динамически добавляемые поля уже хранить в отдельной структуре.
SergGol mirЕсли структура базы (в вашей озвучке ++ атрибуты таблиц) меняются не через день, а редко и очень обоснованно, то почему "создавать новый поля для существующих таблиц не приемлемый вариант"? ...Для добавления колонки в любом случае нужен исключительный доступ к таблице. Не во всех случаях это подходит.А что, поля добавляет пользователь в ран-тайме? Тада конечно. Но я говорил о другом случае, когда это -- задача административного характера.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34338242
raptor@x-plat.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mir raptor@x-plat.ruСам клиент не будет извлекать данные - они ему будут web-сервисом передаваться. А свойства будут добавляться совершенно неизвестно когда как и сколько. Мало того после публикации этого поста еще добавилось 1 условие в задании, что конкретному объекту можно добавить свое поле, которого не будет у других.Если не сложно, опишите, что за задача этого требует, мне познавательно будет.
Попробуйте все же не полностью на EAV переходить, а делать таблицы с базовым набором полей (даже с запасом), а дополнительные, динамически добавляемые поля уже хранить в отдельной структуре.
SergGol mirЕсли структура базы (в вашей озвучке ++ атрибуты таблиц) меняются не через день, а редко и очень обоснованно, то почему "создавать новый поля для существующих таблиц не приемлемый вариант"? ...Для добавления колонки в любом случае нужен исключительный доступ к таблице. Не во всех случаях это подходит.А что, поля добавляет пользователь в ран-тайме? Тада конечно. Но я говорил о другом случае, когда это -- задача административного характера.

Смогу рассказать о задаче после марта месяца. Пока не могу :)
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34338414
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirПопробуйте все же не полностью на EAV переходить, а делать таблицы с базовым набором полей (даже с запасом), а дополнительные, динамически добавляемые поля уже хранить в отдельной структуре.


Я ту немного это дело проанализировал - часто невозможно классифицировать сущности. Следовательно, в форме ЭАВ надо бы хранить атрибуты сущностей. А вот атрибуты отношений почти не меняются и частота доступа к ним большая, да и вся логика программы обычно на отношених. Тут надо все держать в жестких таблицах.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34338738
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mirА что, поля добавляет пользователь в ран-тайме? Тада конечно. Но я говорил о другом случае, когда это -- задача административного характера.
Ну если атрибуты плодятся конечным пользователембезо всякого контроля, то тогда, конечно, лучше EAV использовать. В моей практике атрибуты добавлялись все-таки не конечными пользователями, а особо одаренными их представителями - аналитиками и настройщиками. И эти атрибуты были не просто "свалкой" информации, а играли какую-то роль в бизнес-процессе.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34338779
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey mirА что, поля добавляет пользователь в ран-тайме? Тада конечно. Но я говорил о другом случае, когда это -- задача административного характера.
Ну если атрибуты плодятся конечным пользователембезо всякого контроля, то тогда, конечно, лучше EAV использовать. В моей практике атрибуты добавлялись все-таки не конечными пользователями, а особо одаренными их представителями - аналитиками и настройщиками. И эти атрибуты были не просто "свалкой" информации, а играли какую-то роль в бизнес-процессе.

Аналитики и настройщики такие же пользователи.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34339416
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават Юсифов
Аналитики и настройщики такие же пользователи.

Ну все-таки не совсем "такие же".
Эти люди обепечивают технологию работы и использования системы в работе. И посему имеют дело не с отдельными экземплярами, а с группами экземпляров. Простые же пользователи (операторы) работают именно с отдельными экземплярами. Так вот если, модификацией атрибутики занимаются первые, то делают они для целых групп (классов) объектов. Ну а если модифицировать атрибутику должны вторые, то это значит, что собственный набор атрибутов будет у каждого объекта. Соответственно и способ реализации требуется разный.
Наример, технолог может решить, что в накладной надо указывать скажем ФИО водителя - он добавит новое поле и это поле будет у всех накладных. Другое дело, если оператор вдруг решил сам добавить в документ какую-то дополнительную информацию.
...
Рейтинг: 0 / 0
25 сообщений из 48, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Каким образом лучше хранить набор данных, который будет меняться.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]