powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / вопрос по проектированию
9 сообщений из 9, страница 1 из 1
вопрос по проектированию
    #33151110
prof79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть следующая задача:
Необходимо спроектировать БД, хранящую и обрабатывающую некие документы.

Документ имеет несколько полей. Информацию в документе всегда можно преобразовать к массиву строк "имя поля=значение(или NULL)".

Документы приходят в различных форматах. Форматов много, они очень разные, могут добавляться и изменяться. Документов приходит много: до 100 000 в сутки. Необходимо хранить данные минимум за 3 месяца.
Обработка подразумевает собой выдача документов клиентам по заранее заданному фильтру, перевод документа из одного формата в другой, ведение статистики и т.д.
Клиенты строят фильтры по полям формата. Допустим "Отправитель='Москва' И срочность='ОЧЕНЬ СРОЧНО'". Для этого предполагается разбирать документы на поля и хранить их в разобранном виде. Возник вопрос как лучше сделать.

Вариант 1.
Для каждого формата сделать таблицу столбцы которой соответсвует полям формата. И раскладывать документы по таблицам.

Вариант 2.
Создать таблицу с полями: (document_id, format_id, field_name_id, field_value).
Т.е. все складывать в одну таблицу с ссылками на формат и поле.

Что лучше выбрать?
...
Рейтинг: 0 / 0
вопрос по проектированию
    #33151630
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однозначно вариант 2, т.к. вариант 1 будете постоянно править и дополнять.
Да и интерфейс будет более унифицированным.
...
Рейтинг: 0 / 0
вопрос по проектированию
    #33151927
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVОднозначно вариант 2, т.к. вариант 1 будете постоянно править и дополнять.
Да и интерфейс будет более унифицированным.300 000 записей * 30 дней * 3 месяца получаем 10 млн. записей. Вы предлагаете умножить их еще на N параметров? И иметь базу данных, состоящую на 90% только из ключевых полей?

По моему - вариант 1. При этом две таблцицы - одна реестр операций, вторая - детали. В таблицах набор полей разных типов. Одно и то же поле может иметь разный смыл для разного типа документов. Структура в этом случае стабильная. Ее не надо менять при появлении нового параметра в документе. Просто под этот параметр отводится одно из свободных полей подходящего типа.
...
Рейтинг: 0 / 0
вопрос по проектированию
    #33152089
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Практически тот же вопрос был про
типы товаров
...
Рейтинг: 0 / 0
вопрос по проектированию
    #33152163
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 PVP
Совершенно верно ! Но, то, что Вы предложили и есть пожалуй Вариант 2, т.к. в Вар.1 у каждого типа документа своя уникальная таблица с уникальным назначением полей. А точнее, то это некий 3-й вариант. Не такой как предложил афтар топека :) :)

Создавать на каждый тип отдельную таблицу заведома неверно.
...
Рейтинг: 0 / 0
вопрос по проектированию
    #33153591
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prof79Документы приходят в различных форматах. Форматов много, они очень разные, могут добавляться и изменяться.
Что то мне не верится... Приходят в разных форматах или хранятся в разных форматах?
Если это типизированные документы, то при закачке данных нужно приводить экземпляры к одному формату и хранить в одной таблице.
Если это не типизированные типа приказов то в основной таблице хранятся обшие данные (номер, дата, автор, состояние...) а содержательная часть в блобе.

LSVОднозначно вариант 2, т.к. вариант 1 будете постоянно править и дополнять. Да и интерфейс будет более унифицированным.

А вообще истина обычно где-то рядом все что типизируемо лучше хранить в таблицах, все доп. данные которые зависят от экземпляров документов лучше хранить по "Вариант 2."
...
Рейтинг: 0 / 0
вопрос по проектированию
    #33153802
ModelR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У варианта 2 есть еще одно преимущество - он симметричен по отношению к именам параметров и их значениям. Можно легко спросить дайте мне все документы, где есть значение <1000, чтобы это не было.
...
Рейтинг: 0 / 0
вопрос по проектированию
    #33154322
Estets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ModelRУ варианта 2 есть еще одно преимущество - он симметричен по отношению к именам параметров и их значениям. Можно легко спросить дайте мне все документы, где есть значение <1000, чтобы это не было.
Универсальный тип хранения данных это строка, а с ней достаточно проблематично спросить "где есть значение <1000" без конвертации.
Можно конечно разделять значения на 3 поля строка-сумма-дата, но тогда усложняется внесение данных. Плюс "вариант 2" имеет несколько неисправимых ограничений:
а) Сложность организации отношений мастер-детейл, когда заносятся документы с перечнями
б) Сложность построения типичных бизнес запросов типа
выберите мне платежи, входящие, с даты.. по дату..., с суммой больше... где в описании платежа есть слово "комиссия" от клиента "ХХХ"
...
Рейтинг: 0 / 0
вопрос по проектированию
    #33154464
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prof79
Если уж хотите "унификации" - то если у вас БД с поддержкой хранения xml документов с заранее известной схемой (есть xsd) - то воспользуйтесь ей. Это фактически вариант №1 но всю модификацию схемы хранения будет выполнять СУБД и для вас она будет прозрачной. А так - вариант 2 - это если мало времени или еще чего - в общем это будет не РБД ;)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / вопрос по проектированию
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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