Гость
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / База данных для хранения разных типов документов / 18 сообщений из 18, страница 1 из 1
18.02.2019, 15:09
    #39775614
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
Есть у меня программка, с 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. В каждом документе должна быть возможность сохранения неограниченного числа ссылок на другие документы в этой базе.

Модератор: Тема перенесена из форума "Программирование".
...
Рейтинг: 0 / 0
26.02.2019, 09:10
    #39779121
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
Вернулся к задачке.

Как лучше поступить, хранить все документы в главной таблице, допустим Documents. В поле BLOB и еще тип документа в отдельном поле. Или создать отдельные таблицы для документов (UnicodeText, RichText, File, Picture) а в таблице Documents указывать только тип документа и ID записи в таблице типа документа. Какой вариант предпочтительнее?
...
Рейтинг: 0 / 0
26.02.2019, 10:12
    #39779160
L_argo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
EoltВернулся к задачке.

Как лучше поступить, хранить все документы в главной таблице, допустим Documents. В поле BLOB и еще тип документа в отдельном поле. Или создать отдельные таблицы для документов (UnicodeText, RichText, File, Picture) а в таблице Documents указывать только тип документа и ID записи в таблице типа документа. Какой вариант предпочтительнее?Какие еще нафиг отдельные таблицы ? Это шутка ?
...
Рейтинг: 0 / 0
26.02.2019, 10:20
    #39779168
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
EoltХочу переделать ее в обычную SQL. Движок SQLite.
EoltВ поле BLOB
Файлы меньше 100KB что-ли? Если больше, то чтение из отдельного файла будет быстрее.
...
Рейтинг: 0 / 0
26.02.2019, 11:41
    #39779220
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
Дмитрий МухEoltХочу переделать ее в обычную SQL. Движок SQLite.
EoltВ поле BLOB
Файлы меньше 100KB что-ли? Если больше, то чтение из отдельного файла будет быстрее.

В основном меньше. Только наверное треть файлов будет больше 100кб
...
Рейтинг: 0 / 0
26.02.2019, 12:01
    #39779231
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
EoltВернулся к задачке.

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

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

Оптимально:
Хранить файлы в файловой системе.
В БД хранить ссылку на файл и доп информацию (тип, название, примечание и т.д.)
...
Рейтинг: 0 / 0
26.02.2019, 12:24
    #39779242
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
mad_nazgul,

Хранить отдельно не вариант. Данные в базе и сами файлы могут быть зашифрованы. И один файл хранилища всегда удобнее, чем БД+куча мелких файликов.
...
Рейтинг: 0 / 0
27.02.2019, 07:22
    #39779587
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
Eoltmad_nazgul,

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

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

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

Еще раз.
Либо вы получаете проблему огромной таблицы, либо проблему кучи join-ов.
Выбирайте что вам больше нравиться. ;-)
...
Рейтинг: 0 / 0
28.02.2019, 05:00
    #39780164
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
Если мне нужно связать с каждым документом список тегов. Как лучше организовать их хранение в БД?
Допустим каждый документ может иметь от 0 до 64 тегов. Можно делать поиск по-тегам, или отбирать документы по-нескольким тегам комбинируя их в логические выражения.
...
Рейтинг: 0 / 0
28.02.2019, 09:32
    #39780194
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
EoltЕсли мне нужно связать с каждым документом список тегов. Как лучше организовать их хранение в БД?
Допустим каждый документ может иметь от 0 до 64 тегов. Можно делать поиск по-тегам, или отбирать документы по-нескольким тегам комбинируя их в логические выражения.

Лучше никак. Приколы с полнотекстовым поиском можно встретить в любой БД.
ИМХО стоит обратить внимание, на что-то вроде ElasticSearch.
:-)
...
Рейтинг: 0 / 0
28.02.2019, 12:37
    #39780301
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
Eoltmad_nazgul,

Хранить отдельно не вариант. Данные в базе и сами файлы могут быть зашифрованы. И один файл хранилища всегда удобнее, чем БД+куча мелких файликов.бэкапить это добро планируешь?
...
Рейтинг: 0 / 0
28.02.2019, 12:53
    #39780315
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
EoltВернулся к задачке.

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

Первый. Это если не брать в расчёт, что хранение файлов в БД -- плохая практика. По крайне мере, хотя бы для файлов отдельную БД выдели. Лучше всего FS, или специализированные решения.
...
Рейтинг: 0 / 0
02.03.2019, 20:42
    #39781393
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
mad_nazgulЛучше никак. Приколы с полнотекстовым поиском можно встретить в любой БД.
ИМХО стоит обратить внимание, на что-то вроде ElasticSearch.
:-)

Надо. Думаю может создать отдельную таблицу для тегов. На 64 столбца. ID записи в этой таблице связывать со стобцом тегов в таблице Documents
...
Рейтинг: 0 / 0
03.03.2019, 11:11
    #39781473
Cat2
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
EoltЕсли мне нужно связать с каждым документом список тегов. Как лучше организовать их хранение в БД?
В виде отношения многие-ко-многим через промежуточную таблицу
...
Рейтинг: 0 / 0
03.03.2019, 22:35
    #39781645
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
Cat2,

Спасибо!
...
Рейтинг: 0 / 0
04.03.2019, 09:17
    #39781719
Фэйтл Эра
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
Eolt,

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

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

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

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

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

Применяется для групповой работы со однотипными документами, в основном - со сметно-нормативными, хотя есть случаи, когда ведут какой-то заумный учет оборудования, регистрацию писем и проч.
...
Рейтинг: 0 / 0
05.03.2019, 19:32
    #39782692
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
Фэйтл Эра,

Название продукта не подскажете?
...
Рейтинг: 0 / 0
06.03.2019, 09:07
    #39782788
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
База данных для хранения разных типов документов
EoltЕсть у меня программка, с NoSQL базой. Хочу переделать ее в обычную SQL

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


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