|
|
|
Таблица, динамически расширяемая. Как реализовать лучше?
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток всем! Есть задача, непростая ... Есть некая таблица 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 дополнительных таблиц, в каждой из которых надо будет вести поиск по контексту в связке с основной. Знатоки проектирования БД, откликнитесь плз, не хотелось бы спроектировать изначально кривую систему. Заранее всем спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2008, 18:46:36 |
|
||
|
Таблица, динамически расширяемая. Как реализовать лучше?
|
|||
|---|---|---|---|
|
#18+
user defined fields - все одного типа? если да, то вариант 3 - сделать одну дополнительную таблицу с ID_документа, ID_дополнительного_атрибута, значение_дополнительного_атрибута. 4 вариант - использовать одно дополнительное поле в основной таблице, но со структурированным содержимым, начиная от простого перечисления через запятую до всяких XML-ей. Какой вариант лучше - зависит от многого. В частности от того, какие ограничения должны накладываться на данные, требуемой гибкости, используемой СУБД и даже количества оперативки на сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2008, 19:01:10 |
|
||
|
Таблица, динамически расширяемая. Как реализовать лучше?
|
|||
|---|---|---|---|
|
#18+
andron123Доброго времени суток всем! Есть задача, непростая ... это типовая задача - тысячу раз обсуждалась... воспользуйся поиском по форуму ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2008, 20:13:17 |
|
||
|
Таблица, динамически расширяемая. Как реализовать лучше?
|
|||
|---|---|---|---|
|
#18+
авторuser defined fields - все одного типа? если да, то вариант 3 - сделать одну дополнительную таблицу с ID_документа, ID_дополнительного_атрибута, значение_дополнительного_атрибута. - нет, данные разные, длин полей тоже. Наверное такой вариант не подходит. автор4 вариант - использовать одно дополнительное поле в основной таблице, но со структурированным содержимым, начиная от простого перечисления через запятую до всяких XML-ей. - это вариант, но имхо не очень оптимальный с точки зрения последующего разбора данных итп и тем более с точки зрения контекстного поиска при наличии большого кол-ва записей. Да, самое важное то я и забыл. Нет привязки на конкретную СУБД, желательно чтобы это работало максимально эффективно на разных современных СУБД. 2 BULK INSERT: Если знаете ссылки или ключи, по которым поискать, подскажите пожалуйста. Все мои попытки поиска не дали ожидаемого результата, потому и написал здесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2008, 20:54:36 |
|
||
|
Таблица, динамически расширяемая. Как реализовать лучше?
|
|||
|---|---|---|---|
|
#18+
> Все мои попытки поиска не дали ожидаемого результата, Логично. Нет приемлемых реализаций. > потому и написал здесь. Г-н ModelR, если не ошибаюсь, поднимал тему про классификацию документов, полистайте, там есть ссылки на интересные определения. Задача хранения документов в базе данных решается достаточно геморройно. Приемлемым было бы взять какую-либо из хорошо документированных стандартных моделей документа и реализовать ее в реляционной структуре, расширив ее (модель) стереотипами RDBMS (Вы ведь собираетесь контролировать целостность документов?). Если чувствуете, что сможете это реализовать - дерзайте. Если нет - дешевле купить готовую систему документооборота. Да, она будет кривой, но имеете реальный шанс сэкономить время и деньги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.09.2008, 21:17:15 |
|
||
|
Таблица, динамически расширяемая. Как реализовать лучше?
|
|||
|---|---|---|---|
|
#18+
andron123Если знаете ссылки или ключи, по которым поискать, подскажите пожалуйста. Все мои попытки поиска не дали ожидаемого результата, потому и написал здесь. Да хоть вот - находится на первой странице соседнего форума. andron123Да, самое важное то я и забыл. Нет привязки на конкретную СУБД, желательно чтобы это работало максимально эффективно на разных современных СУБД.Если с моделью данных вы сможете еще так сделать, то с серверной частью будут бааальшие проблемы в реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2008, 11:32:09 |
|
||
|
Таблица, динамически расширяемая. Как реализовать лучше?
|
|||
|---|---|---|---|
|
#18+
2 Bely: Спасибо, линк почитаю. На счет серверной части планирую все упростить - не делать ХП, вью, триггары итп. Только для хранения данных, т.е. нужна просто расширяемая структура таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2008, 11:39:01 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=35523361&tid=1543678]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
237ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 495ms |

| 0 / 0 |
