Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
 База данных для хранения разных типов документов  [new]
Eolt
Member

Откуда:
Сообщений: 1480
Есть у меня программка, с NoSQL базой. Хочу переделать ее в обычную SQL. Движок SQLite.
Помогите спроектировать схему базы данных.

1. Документы хранятся в виде иерархического дерева, каждый узел дерева - документ определенного типа.
2. Типы документов: UnicodeText, RTF Text, Source Code, Picture, Binary File
3. У каждого документа если текстовое поле описания. Формат Unicode Plain Text.
4. У каждого документа есть коллекция тегов. По-которым можно найти его в поиске. Формат Unicode Plain Text.
5. Каждый документ имеет свой специфический набор свойств (Шрифт, цвет шрифта, цвет фона, дату создания и т.д.)
6. Каждый узел дерева имеет свой набор свойств (Шрифт, цвет, иконка)
7. Возможно изменить свойства определенного типа документов (тогда меняются все документы этого типа свойства которых не были изменены вручную)
8. Возможно поменять свойства каждого отдельного документа и узла дерева.
9. Поиск документов возможен: По-содержимому (Text, RFT, Source), по-полю описания, по-тегам, по-дате создания.
10. В каждом документе должна быть возможность сохранения неограниченного числа ссылок на другие документы в этой базе.

Модератор: Тема перенесена из форума "Программирование".


К сообщению приложен файл. Размер - 32Kb
18 фев 19, 15:09    [21813116]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Eolt
Member

Откуда:
Сообщений: 1480
Вернулся к задачке.

Как лучше поступить, хранить все документы в главной таблице, допустим Documents. В поле BLOB и еще тип документа в отдельном поле. Или создать отдельные таблицы для документов (UnicodeText, RichText, File, Picture) а в таблице Documents указывать только тип документа и ID записи в таблице типа документа. Какой вариант предпочтительнее?
26 фев 19, 09:10    [21819336]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
L_argo
Member

Откуда:
Сообщений: 890
Eolt
Вернулся к задачке.

Как лучше поступить, хранить все документы в главной таблице, допустим Documents. В поле BLOB и еще тип документа в отдельном поле. Или создать отдельные таблицы для документов (UnicodeText, RichText, File, Picture) а в таблице Documents указывать только тип документа и ID записи в таблице типа документа. Какой вариант предпочтительнее?
Какие еще нафиг отдельные таблицы ? Это шутка ?
26 фев 19, 10:12    [21819405]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 2042
Eolt
Хочу переделать ее в обычную SQL. Движок SQLite.

Eolt
В поле BLOB

Файлы меньше 100KB что-ли? Если больше, то чтение из отдельного файла будет быстрее.
26 фев 19, 10:20    [21819415]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Eolt
Member

Откуда:
Сообщений: 1480
Дмитрий Мух
Eolt
Хочу переделать ее в обычную SQL. Движок SQLite.

Eolt
В поле BLOB

Файлы меньше 100KB что-ли? Если больше, то чтение из отдельного файла будет быстрее.


В основном меньше. Только наверное треть файлов будет больше 100кб
26 фев 19, 11:41    [21819504]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4748
Eolt
Вернулся к задачке.

Как лучше поступить, хранить все документы в главной таблице, допустим Documents. В поле BLOB и еще тип документа в отдельном поле. Или создать отдельные таблицы для документов (UnicodeText, RichText, File, Picture) а в таблице Documents указывать только тип документа и ID записи в таблице типа документа. Какой вариант предпочтительнее?


В общем случае предпочтительнее хранить файлы в файловой системе.
А так многие БД не очень любят большие таблицы.
Вставка/чтение в таких это отдельная песня.
Но так же многие БД не очень любят много join'ов.
Так что в общем случае - ХЗ.

Оптимально:
Хранить файлы в файловой системе.
В БД хранить ссылку на файл и доп информацию (тип, название, примечание и т.д.)
26 фев 19, 12:01    [21819540]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Eolt
Member

Откуда:
Сообщений: 1480
mad_nazgul,

Хранить отдельно не вариант. Данные в базе и сами файлы могут быть зашифрованы. И один файл хранилища всегда удобнее, чем БД+куча мелких файликов.
26 фев 19, 12:24    [21819579]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4748
Eolt
mad_nazgul,

Хранить отдельно не вариант. Данные в базе и сами файлы могут быть зашифрованы. И один файл хранилища всегда удобнее, чем БД+куча мелких файликов.


Кто мешает хранить зашифрованные файлы на файловой системе?!

У Oracle и MS SQL есть специальные типы для хранения файлов в БД.
На сколько производительно данное решение я не знаю - не мерил.
Для SQLite хранение фалов в БД, может оказаться причиной тормозов.
Но никто вам не мешает приобрести собственный опыт.

Еще раз.
Либо вы получаете проблему огромной таблицы, либо проблему кучи join-ов.
Выбирайте что вам больше нравиться. ;-)
27 фев 19, 07:22    [21820156]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Eolt
Member

Откуда:
Сообщений: 1480
Если мне нужно связать с каждым документом список тегов. Как лучше организовать их хранение в БД?
Допустим каждый документ может иметь от 0 до 64 тегов. Можно делать поиск по-тегам, или отбирать документы по-нескольким тегам комбинируя их в логические выражения.
28 фев 19, 05:00    [21821312]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
mad_nazgul
Member

Откуда:
Сообщений: 4748
Eolt
Если мне нужно связать с каждым документом список тегов. Как лучше организовать их хранение в БД?
Допустим каждый документ может иметь от 0 до 64 тегов. Можно делать поиск по-тегам, или отбирать документы по-нескольким тегам комбинируя их в логические выражения.


Лучше никак. Приколы с полнотекстовым поиском можно встретить в любой БД.
ИМХО стоит обратить внимание, на что-то вроде ElasticSearch.
:-)
28 фев 19, 09:32    [21821393]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Изопропил
Member

Откуда:
Сообщений: 31190
Eolt
mad_nazgul,

Хранить отдельно не вариант. Данные в базе и сами файлы могут быть зашифрованы. И один файл хранилища всегда удобнее, чем БД+куча мелких файликов.
бэкапить это добро планируешь?
28 фев 19, 12:37    [21821617]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
hVostt
Member

Откуда:
Сообщений: 15821
Eolt
Вернулся к задачке.

Как лучше поступить, хранить все документы в главной таблице, допустим Documents. В поле BLOB и еще тип документа в отдельном поле. Или создать отдельные таблицы для документов (UnicodeText, RichText, File, Picture) а в таблице Documents указывать только тип документа и ID записи в таблице типа документа. Какой вариант предпочтительнее?


Первый. Это если не брать в расчёт, что хранение файлов в БД -- плохая практика. По крайне мере, хотя бы для файлов отдельную БД выдели. Лучше всего FS, или специализированные решения.
28 фев 19, 12:53    [21821643]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Eolt
Member

Откуда:
Сообщений: 1480
mad_nazgul
Лучше никак. Приколы с полнотекстовым поиском можно встретить в любой БД.
ИМХО стоит обратить внимание, на что-то вроде ElasticSearch.
:-)


Надо. Думаю может создать отдельную таблицу для тегов. На 64 столбца. ID записи в этой таблице связывать со стобцом тегов в таблице Documents
2 мар 19, 20:42    [21823446]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Cat2
Member

Откуда: Petroskoi, Karjala
Сообщений: 145645
Eolt
Если мне нужно связать с каждым документом список тегов. Как лучше организовать их хранение в БД?

В виде отношения многие-ко-многим через промежуточную таблицу
3 мар 19, 11:11    [21823589]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Eolt
Member

Откуда:
Сообщений: 1480
Cat2,

Спасибо!
3 мар 19, 22:35    [21823908]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Фэйтл Эра
Member

Откуда:
Сообщений: 627
Eolt,

у нас реализована подобная система.
Файлы хранятся в БД, используется Firebird 2.0. Надо бы проапгрейдиться до FB 3.0, да и так все работает.

Почему файлы хранятся именно в БД, а не в файловой системе? А по кочану: когда-то начали так делать, пошло легко, так и не стали менять схему. Пока ничего плохого в этом не было замечено, одни положительные моменты. Может быть, если бы сделали хранение в ФС, а в самой базе - ссылки на файл, то тоже бы не жаловались.

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

При загрузке в базу файлы, в зависимости от типа, парсятся, извлекаются "теги" (у нас называются "атрибуты документа"). Как минимум присутствует свойство "Наименование". "Парсеры" - это плагины, для каждого типа документов. В некоторых случаях юзер может такие теги исправлять прямо в базе, в дальнейшем, при загрузке документа из базы в обработку. измененные значения тэгов внедряются в загруженный документ. Кроме извлеченных тегов, документы может иметь "внешние" тэги, не связанные с содержимым ("Утвержден", "Создатель", "Момент создания", "Ответственный куратор" и т.п.).

Связи между документами реализована как дополнительный атрибут (типа "ссылка"). Просто декларируешь ассоциацию между такими и такими документами, и в рамках этой ассоциации создаешь атрибут, указывая, какие не-ссылочные атрибуты будут отображаться при показе ссылки. Реализовано с помощью промежуточной таблички.
Ради чего все это? Ради систематизации, разделения прав и отчетности. Навешена система групп пользователей, группам назначаются права по отношению к действиям, документам и атрибутам документов. Юзер может принадлежать к одной или нескольким группам (права "складываются"). Ну и встроенная отчетная система, которая обрабатыват массивы документов в соответствии с нужным алгоритмами (используется скриптовый язык, хотя можно было и с помощью плагинов сделать).

Применяется для групповой работы со однотипными документами, в основном - со сметно-нормативными, хотя есть случаи, когда ведут какой-то заумный учет оборудования, регистрацию писем и проч.
4 мар 19, 09:17    [21824049]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Eolt
Member

Откуда:
Сообщений: 1480
Фэйтл Эра,

Название продукта не подскажете?
5 мар 19, 19:32    [21825713]     Ответить | Цитировать Сообщить модератору
 Re: База данных для хранения разных типов документов  [new]
Изопропил
Member

Откуда:
Сообщений: 31190
Eolt
Есть у меня программка, с NoSQL базой. Хочу переделать ее в обычную SQL


Спонсор у этого начинания есть?
6 мар 19, 09:07    [21825912]     Ответить | Цитировать Сообщить модератору
Все форумы / Проектирование БД Ответить