powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / База данных для хранения разных типов документов
18 сообщений из 18, страница 1 из 1
База данных для хранения разных типов документов
    #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
База данных для хранения разных типов документов
    #39779121
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернулся к задачке.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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