powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Таблица, динамически расширяемая. Как реализовать лучше?
8 сообщений из 8, страница 1 из 1
Таблица, динамически расширяемая. Как реализовать лучше?
    #35523337
andron123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток всем!

Есть задача, непростая ...

Есть некая таблица Documents, являющаяся основной таблицей хранения документов. В ней есть фиксированное количество полей, являющиеся стандартными атрибутами документов, пока их 20.
В зависимости от типа документа могут потребоваться дополнительные поля для хранения дополнительных атрибутов, кроме этих 20-ти стандартных. Т.е. так называемые user defined fields.
Вопрос - где и как их лучше хранить?

Вариант 1, нерациональный из-за появления дырок, например, вот поля из Documents:
Id, Date, Category, Name, Qty, ... ,Status, UserDefinedField1,UserDefinedField2, ... , UserDefinedField10
Дырки получаются тогда, когда для документа одной категории не задействовано ни одного дополнительного поля, а для документа остальных категорий задействовано одно или два и только для какого-то одного задействованы все 10 доп.полей.

Вариант 2. Вроде бы рациональный, но заставляет плодить новые таблицы на каждый тип документа.
Вот будут поля из Documents:
Id, Date, Category, Name, Qty, ... ,Status
Далее, при необходимости ведения дополнительных атрибутов я на каждый новый тип документа создаю по новой таблице с четко определенным и только нужным количеством полей, например, MyDefinedTable_1 имеющая всего два дополнительные поля и поле id для связки с основной таблицей - Id, AddField1, AddField2. Далее, MyDefinedTable_2 имеющая всего пять дополнительных полей и поле id для связки с основной таблицей - Id, AddField1, AddField2, AddField3, AddField4, AddField5. И так далее, по одной таблице на каждую категорию, где не хватает стандартных полей.

Есть ли вариант 3?

Что рациональнее?
1) С точки зрения структуры БД
2) С точки зрения постоянного прироста кол-ва документов, скажем по 1000 в день
3) С точки зрения дальнейших поисков по контексту по всем документам и их дополнительным полям?

4) Не умрет ли такая структура при наличии скажем, миллиона записей и не подвиснет ли СУБД при поиске по всем атрибутам по контексту, например когда у меня будет 20 разных категорий документов, т.е. 20 дополнительных таблиц, в каждой из которых надо будет вести поиск по контексту в связке с основной.

Знатоки проектирования БД, откликнитесь плз, не хотелось бы спроектировать изначально кривую систему.

Заранее всем спасибо.
...
Рейтинг: 0 / 0
Таблица, динамически расширяемая. Как реализовать лучше?
    #35523361
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user defined fields - все одного типа?
если да, то вариант 3 - сделать одну дополнительную таблицу с ID_документа, ID_дополнительного_атрибута, значение_дополнительного_атрибута.

4 вариант - использовать одно дополнительное поле в основной таблице, но со структурированным содержимым, начиная от простого перечисления через запятую до всяких XML-ей.

Какой вариант лучше - зависит от многого. В частности от того, какие ограничения должны накладываться на данные, требуемой гибкости, используемой СУБД и даже количества оперативки на сервере.
...
Рейтинг: 0 / 0
Таблица, динамически расширяемая. Как реализовать лучше?
    #35523433
Фотография BULK INSERT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron123Доброго времени суток всем!

Есть задача, непростая ...

это типовая задача - тысячу раз обсуждалась... воспользуйся поиском по форуму
...
Рейтинг: 0 / 0
Таблица, динамически расширяемая. Как реализовать лучше?
    #35523465
andron123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторuser defined fields - все одного типа?
если да, то вариант 3 - сделать одну дополнительную таблицу с ID_документа, ID_дополнительного_атрибута, значение_дополнительного_атрибута.

- нет, данные разные, длин полей тоже. Наверное такой вариант не подходит.

автор4 вариант - использовать одно дополнительное поле в основной таблице, но со структурированным содержимым, начиная от простого перечисления через запятую до всяких XML-ей.

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

Да, самое важное то я и забыл. Нет привязки на конкретную СУБД, желательно чтобы это работало максимально эффективно на разных современных СУБД.

2 BULK INSERT:
Если знаете ссылки или ключи, по которым поискать, подскажите пожалуйста. Все мои попытки поиска не дали ожидаемого результата, потому и написал здесь.
...
Рейтинг: 0 / 0
Таблица, динамически расширяемая. Как реализовать лучше?
    #35523490
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Все мои попытки поиска не дали ожидаемого результата,

Логично. Нет приемлемых реализаций.

> потому и написал здесь.

Г-н ModelR, если не ошибаюсь, поднимал тему про классификацию документов, полистайте, там есть ссылки на интересные определения.

Задача хранения документов в базе данных решается достаточно геморройно. Приемлемым было бы взять какую-либо из хорошо документированных стандартных моделей документа и реализовать ее в реляционной структуре, расширив ее (модель) стереотипами RDBMS (Вы ведь собираетесь контролировать целостность документов?). Если чувствуете, что сможете это реализовать - дерзайте. Если нет - дешевле купить готовую систему документооборота. Да, она будет кривой, но имеете реальный шанс сэкономить время и деньги.
...
Рейтинг: 0 / 0
Таблица, динамически расширяемая. Как реализовать лучше?
    #35524145
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andron123Если знаете ссылки или ключи, по которым поискать, подскажите пожалуйста. Все мои попытки поиска не дали ожидаемого результата, потому и написал здесь.
Да хоть вот - находится на первой странице соседнего форума.

andron123Да, самое важное то я и забыл. Нет привязки на конкретную СУБД, желательно чтобы это работало максимально эффективно на разных современных СУБД.Если с моделью данных вы сможете еще так сделать, то с серверной частью будут бааальшие проблемы в реализации.
...
Рейтинг: 0 / 0
Таблица, динамически расширяемая. Как реализовать лучше?
    #35524164
andron123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Bely:
Спасибо, линк почитаю.

На счет серверной части планирую все упростить - не делать ХП, вью, триггары итп. Только для хранения данных, т.е. нужна просто расширяемая структура таблицы.
...
Рейтинг: 0 / 0
Таблица, динамически расширяемая. Как реализовать лучше?
    #35525681
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В общем-то тут эта проблема обсасывается. Про динамические схемы хранения

База по Тенцеру
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Таблица, динамически расширяемая. Как реализовать лучше?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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