powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Каким образом лучше хранить набор данных, который будет меняться.
48 сообщений из 48, показаны все 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
Каким образом лучше хранить набор данных, который будет меняться.
    #34339836
mir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyНаример, технолог может решить, что в накладной надо указывать скажем ФИО водителя - он добавит новое поле и это поле будет у всех накладных.Если анализ показал, что у всех накладных должно быть поле "ФИО водителя", почему бы не добавить его в структуру таблицы? Я в том смысле, что пытаюсь нащупать те критерии, по которым уже реально нужен EAV, а стандартная технология не применима. Все же трудно спорить, что EAV-модель влечет много неудобств и недостатков, поэтому лепить ее где не попало, видимо, не стоит, не так ли?
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34339957
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mir Bogdanov AndreyНаример, технолог может решить, что в накладной надо указывать скажем ФИО водителя - он добавит новое поле и это поле будет у всех накладных.Если анализ показал, что у всех накладных должно быть поле "ФИО водителя", почему бы не добавить его в структуру таблицы? Я в том смысле, что пытаюсь нащупать те критерии, по которым уже реально нужен EAV, а стандартная технология не применима. Все же трудно спорить, что EAV-модель влечет много неудобств и недостатков, поэтому лепить ее где не попало, видимо, не стоит, не так ли?

Ну так я о том и говорю, что добавление полей не простыми пользователями, а "аналитиками" - процесс гораздо более отвественный. Для таких случаев правильное решение - модифицировать структуру данных. А EAV нужно использовать тогда, когда изменение атрибутного состава производится совершенно "бесконтрольно" и никакая типизация - невозможна.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34340804
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raptor@x-plat.ruМало того после публикации этого поста еще добавилось 1 условие в задании, что конкретному объекту можно добавить свое поле, которого не будет у других.Что значит не будет у других?
Попытка добавить это поле другому объекту должна категорически пресекаться?
Или просто процент его заполнения очень мал?
Или это "личное" поле, и значения ему может присваивать только тот, кто его создал?
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34340948
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
raptor@x-plat.ruСам клиент не будет извлекать данные - они ему будут web-сервисом передаваться. А свойства будут добавляться совершенно неизвестно когда как и сколько. Мало того после публикации этого поста еще добавилось 1 условие в задании, что конкретному объекту можно добавить свое поле, которого не будет у других.

Я бы начал с выяснения того "когда как и сколько" будет добавлятся атрибутов, поскольку постановка "совершенно неизвестно" неверна в корне. Разработчик системы должен это знать, иначе может оказаться, что ряд важных способов добавления не реализован, а те что реализованы нафиг не нужны.
Ответ на вопрос "сколько" тоже очень важен. Может быть каждый объект имеет уникальный класс (как раз то условие, которое добавилось). Тут скорее XML в помощь. Современные СУБД с поддержкой XML запросов как нибудь с этими данными справятся.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34341021
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyА EAV нужно использовать тогда, когда изменение атрибутного состава производится совершенно "бесконтрольно" и никакая типизация - невозможна.

EAV реализовать поразному можно. XML это тоже реализация EAV.
ИМХО, динамическая типизация возможна всегда. Вопрос в том, что "совершенно "бесконтрольно"", означает, что семантика новых типов будет известна только её автору. Зачем делать централизованное хранилище данных, если у каждого своя песочница?

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

Ну все-таки не совсем "такие же".
Эти люди обепечивают технологию работы и использования системы в работе. И посему имеют дело не с отдельными экземплярами, а с группами экземпляров. Простые же пользователи (операторы) работают именно с отдельными экземплярами. Так вот если, модификацией атрибутики занимаются первые, то делают они для целых групп (классов) объектов. Ну а если модифицировать атрибутику должны вторые, то это значит, что собственный набор атрибутов будет у каждого объекта. Соответственно и способ реализации требуется разный.
Наример, технолог может решить, что в накладной надо указывать скажем ФИО водителя - он добавит новое поле и это поле будет у всех накладных. Другое дело, если оператор вдруг решил сам добавить в документ какую-то дополнительную информацию.

Потому и есть разделение. Атрибуты на уровне типа вводят одни, а на уровне объекта другие (права).
Т.е. - можно добавить "Цвет" типу "Материал", тогда при генерации объекта всегда будет предложено заполнить значение "Цвет". Но оператор может послать это дело и просто удалить "цвет" у конкретного объекта и/или добавить атрибут "процент сырости" который в списке атрибутов типа не значится, но имеется в домене атрибутов (доступ конечно тоже по правам).
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34341654
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават Юсифов
Потому и есть разделение. Атрибуты на уровне типа вводят одни, а на уровне объекта другие (права).

Вопрос все-таки не в правах, а в способе реализации. Я утверждал, что способ реализации у этих атрибутов должен быть разный. Ну а права - это уже отдельная песня.

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

Да возмите, например, самый такой востребованный справочник - справочник материалов и ПКИ (или там как говорят "Номенклатурные позиции").

У "Доска" - "материал", "ширина", "длина", "высота", "коэффициент сырости"...
У "Краски" - "тип", "цвет",..
У "Двигателя" - "мощность",..
у "Коробки" - "передаточное число",..
у "Штаны" - "количество карманов"

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

У "Доска" - "материал", "ширина", "длина", "высота", "коэффициент сырости"...
У "Краски" - "тип", "цвет",..
У "Двигателя" - "мощность",..
у "Коробки" - "передаточное число",..
у "Штаны" - "количество карманов"

Когда мы это дело только учитываем, то эти атрибуты вроде и не нужны.
Но, когда мы собираемся это дела производить, получается совсем другой коленкор.
Если все это объединить, то получится справочник с сотнями атрибутов. А если не объединить, то сотни справочников.

Замечательно. Вы сами привели типизацию своих объектов по количеству используемых атрибутов. Имеем тип "Штаны" с такими-то атрибутами, тип "Коробки" - с другими. Для разных типов - разные таблицы хранения атрибутов. Не вижу сложностей. Если вы собираетесь как-то использовать в системе эти атрибуты, то вам все-равно придется научится их программно идентифицировать. Если же они хранятся просто так, то все это можно назвать одним атрибутом "Описание изделия".
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34342031
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andrey Сахават Юсифов
Да возмите, например, самый такой востребованный справочник - справочник материалов и ПКИ (или там как говорят "Номенклатурные позиции").

У "Доска" - "материал", "ширина", "длина", "высота", "коэффициент сырости"...
У "Краски" - "тип", "цвет",..
У "Двигателя" - "мощность",..
у "Коробки" - "передаточное число",..
у "Штаны" - "количество карманов"

Когда мы это дело только учитываем, то эти атрибуты вроде и не нужны.
Но, когда мы собираемся это дела производить, получается совсем другой коленкор.
Если все это объединить, то получится справочник с сотнями атрибутов. А если не объединить, то сотни справочников.

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

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

Это не единственный способ. Можно разнотипные объекты хранить в одной таблице и даже под группу разных атрибутов использовать одно поле. Другое дело, насколько удобно будет работать с таким хашем. Кроме того процедура определения такой таблицы весьма нетривиальная. Так что проще всего под Штаны и Двигатели создавать разные таблицы, а слить их до кучи можно всегда.

Есть ещё момент, когда прекратить классификацию. Двигатели бывают электрические, паровые, внутреннего сгорания, гужевые и т.д.:o). Далее дизельные, карбюраторные, инжекторные. Турбинные или поршневые. Коллекторные, асинхронные, и д.р.

Положим, у нас есть паровые двигатели, стоит ли создавать подклассы Турбинные, Поршневые, Реактивные или лучше в классе Паровых двигателей определить атрибут принцип действия, который будет являться дискриминатором типа? Если использовать дискриминатор, то мы приходим к тому, что в одной таблице фактически будут храниться разнотипные объекты с общим суперклассом. Сегодня нам достаточно знать о двигателях только принцип действия, завтра нужно будет знать количество и размеры цилиндров, материал турбины, диаметр сопла, расход пара и т.д. Тут напрашивается создание отдельных таблиц и миграция данных. Или использовать "Описание изделия".

Подход "Описание изделия" не противоречит и созданию таблицы EAV, если она понадобится хотя бы как инвертированный файл для контекстного поиска, но управление этим индексом лучше поручить СУБД.
В общем XML и встроенные в СУБД механизмы трансформации данных и контекстного поиска, это мощное оружие в решении задачи.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34342217
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab Bogdanov AndreyДля разных типов - разные таблицы хранения атрибутов.

Это не единственный способ. Можно разнотипные объекты хранить в одной таблице и даже под группу разных атрибутов использовать одно поле. Другое дело, насколько удобно будет работать с таким хашем. Кроме того процедура определения такой таблицы весьма нетривиальная. Так что проще всего под Штаны и Двигатели создавать разные таблицы, а слить их до кучи можно всегда.


Мы вообще не знаем, будут там "штаны" или "Двигатель" или нет.
Как только решили что вмество "Ручки для толкания :)" будем использовать "Двигатель" появляется нужда в двигательях.
Неужто, сразу надо создать новую таблицу?


[quot mcureenab]
Есть ещё момент, когда прекратить классификацию. Двигатели бывают электрические, паровые, внутреннего сгорания, гужевые и т.д.:o). Далее дизельные, карбюраторные, инжекторные. Турбинные или поршневые. Коллекторные, асинхронные, и д.р.

Положим, у нас есть паровые двигатели, стоит ли создавать подклассы Турбинные, Поршневые, Реактивные или лучше в классе Паровых двигателей определить атрибут принцип действия, который будет являться дискриминатором типа? Если использовать дискриминатор, то мы приходим к тому, что в одной таблице фактически будут храниться разнотипные объекты с общим суперклассом. Сегодня нам достаточно знать о двигателях только принцип действия, завтра нужно будет знать количество и размеры цилиндров, материал турбины, диаметр сопла, расход пара и т.д. Тут напрашивается создание отдельных таблиц и миграция данных. Или использовать "Описание изделия".
[quot mcureenab]

А почему мы должны прекращать классификацию? Просто надо дать возможность ввести новый классификатор или подклассы в существующий.
Что Вы подразумевате под "Описание изделия"? Изделие имеет собственные атрибуты, а спецификации собственные. Некоторые атрибуты изделия наследуются от спецификаций, некоторые от процесса изготовления, некоторые приобретенные.

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

классификатор = атрибут или новое значение в домене?

Пусть будет такая возможность, но рано или поздно нужно прекратить наращивать дерево классов и сосредоточится на их доменных атрибутах. Думаю, решение задачи останова и вообще принцип классификации будет зависеть от субъективных предпочтений пользователя, а это не очень хорошо. Кроме того, как я подозреваю, количество классов будет не многим меньше количества объектов. Похоже, направление строгой классификации и типизации в данном случае тупиковое. Нужно просто описывать атрибуты каждого конкретного объекта, а их классификацию возложить на систему или специалистов в этой области.

Сахават ЮсифовЧто Вы подразумевате под "Описание изделия"? Изделие имеет собственные атрибуты, а спецификации собственные. Некоторые атрибуты изделия наследуются от спецификаций, некоторые от процесса изготовления, некоторые приобретенные.

"Описание изделия" - атрибут реляционной БД, колонка в таблице. Для наполнения колонки можно использовать формат XML, где каждому тэгу соответствует некоторый атрибут или их группа.
Принципы наследования атрибутов от других объектов определяются на уровне приложения.
Нужно решить проблему поиска готовых типов, чтобы пользователю каждый раз не приходилось конструировать новый тип с нуля перебирая все существующие домены и оценивая их пригодность для описания изделия.
Время от времени придётся причёсывать БД, чтобы исключить опечатки, и прочие ошибки.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34342407
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab Сахават ЮсифовА почему мы должны прекращать классификацию? Просто надо дать возможность ввести новый классификатор или подклассы в существующий.

классификатор = атрибут или новое значение в домене?

Пусть будет такая возможность, но рано или поздно нужно прекратить наращивать дерево классов и сосредоточится на их доменных атрибутах. Думаю, решение задачи останова и вообще принцип классификации будет зависеть от субъективных предпочтений пользователя, а это не очень хорошо. Кроме того, как я подозреваю, количество классов будет не многим меньше количества объектов. Похоже, направление строгой классификации и типизации в данном случае тупиковое. Нужно просто описывать атрибуты каждого конкретного объекта, а их классификацию возложить на систему или специалистов в этой области.


Классификатор сам по себе. :) У них свои атрибуты из домена атрибутов.
Классификация - это как бы добавить атрибуты к существующим объектам скопом.
Типа множественнного наследования. Основные атрибуты от типа + классификационные, мягкие атрибуты. Типы и классификаторы могут быть агрегированы. Агрегатные объекты проверяются на соответствующий агрегатный тип. А агрегаты классификационные - дело пользователя.
Классификаторы - польностью дело пользователя. Да и типы (кроме некторых для данной предметной области.)

Сахават ЮсифовЧто Вы подразумевате под "Описание изделия"? Изделие имеет собственные атрибуты, а спецификации собственные. Некоторые атрибуты изделия наследуются от спецификаций, некоторые от процесса изготовления, некоторые приобретенные.

"Описание изделия" - атрибут реляционной БД, колонка в таблице. Для наполнения колонки можно использовать формат XML, где каждому тэгу соответствует некоторый атрибут или их группа.
Принципы наследования атрибутов от других объектов определяются на уровне приложения.
Нужно решить проблему поиска готовых типов, чтобы пользователю каждый раз не приходилось конструировать новый тип с нуля перебирая все существующие домены и оценивая их пригодность для описания изделия.
Время от времени придётся причёсывать БД, чтобы исключить опечатки, и прочие ошибки.[/quot]

Ну по хорошему все это будет использовано как часть проги описывающий предметнюю область. Что бы многократно это не делать решил выделить в отдельную часть описания предприятия.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34343803
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сахават ЮсифовНу по хорошему все это будет использовано как часть проги описывающий предметнюю область. Что бы многократно это не делать решил выделить в отдельную часть описания предприятия.

Больше смахивает на инструментарий разработчика, а не на продукт для конечного пользователя.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34343873
SergGol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab Сахават ЮсифовНу по хорошему все это будет использовано как часть проги описывающий предметнюю область. Что бы многократно это не делать решил выделить в отдельную часть описания предприятия.

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

А какая разница. Пусть административного. Значит время на администрирование увеличивается. Причем это разные администраторы. Тот, который по БД, вообще будет против каких-то добавлений полей.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34344639
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenab Сахават ЮсифовНу по хорошему все это будет использовано как часть проги описывающий предметнюю область. Что бы многократно это не делать решил выделить в отдельную часть описания предприятия.

Больше смахивает на инструментарий разработчика, а не на продукт для конечного пользователя.

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

Больше смахивает на инструментарий разработчика, а не на продукт для конечного пользователя.

Разработчика нормативных процессов.
А дальше будет автогенерация сети возможных процесов и (при поступлении заказа на производство) и выбор оптимальной подсети для привязка процессов к реальным.
Ресурсам :)
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34344852
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Типа Workflow?

Значит тебя "Штаны" и "Двигатели" интересуют не нак объекты учета, а как спецификации? Тогда конечно, создавать таблицу "Штаны" нет никакого смысла, ведь по идее они все одинаковые.
Типа, нужна партия товара "Штаны галифе, арт. 12345". В систему заносим спецификацию и запускаем её в workflow. Вопрос, надо ли детализировать что такое "Штаны галифе, арт. 12345", или в пакете технологической документации это уже есть? Видимо, имеет смысл описать из каких деталей состоят штаны, а детали из материалов, указать технологические операции по производству заказу материалов и производству деталей. В итоге от абстрактных атрибутов чего то там непонятного, мы приходим к вполне понятным потокам "Специфкаций изделий", и "Специфкаций операций" в самом общем смысле.
Когда дело дойдёт до учета конкретных изделий, тогда можно подумать о создании соответствующих таблиц, но если экземпляры изделий отличаются только №№ партий, то можно учитывать "Партии" в общем смысле.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34345032
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabТипа Workflow?

Значит тебя "Штаны" и "Двигатели" интересуют не нак объекты учета, а как спецификации? Тогда конечно, создавать таблицу "Штаны" нет никакого смысла, ведь по идее они все одинаковые.
Типа, нужна партия товара "Штаны галифе, арт. 12345". В систему заносим спецификацию и запускаем её в workflow. Вопрос, надо ли детализировать что такое "Штаны галифе, арт. 12345", или в пакете технологической документации это уже есть? Видимо, имеет смысл описать из каких деталей состоят штаны, а детали из материалов, указать технологические операции по производству заказу материалов и производству деталей. В итоге от абстрактных атрибутов чего то там непонятного, мы приходим к вполне понятным потокам "Специфкаций изделий", и "Специфкаций операций" в самом общем смысле.
Когда дело дойдёт до учета конкретных изделий, тогда можно подумать о создании соответствующих таблиц, но если экземпляры изделий отличаются только №№ партий, то можно учитывать "Партии" в общем смысле.
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34345036
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Каким образом лучше хранить набор данных, который будет меняться.
    #34345044
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оттуда иду. :)
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Каким образом лучше хранить набор данных, который будет меняться.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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