Форум программистов, компьютерный форум CyberForum.ru

PostgreSQL

Войти
Регистрация
Восстановить пароль
 
wolfalone
В экстазе
145 / 129 / 28
Регистрация: 05.08.2012
Сообщений: 680
Записей в блоге: 3
#1

Выбор метода хранения данных в БД - PostgreSQL

28.11.2016, 20:45. Просмотров 247. Ответов 1
Метки нет (Все метки)

Доброго времени суток уважаемые!

В своём прошлом вопросе, я спрашивал как разобрать массив "на запчасти", но придя к выводу, что это не оптимально, решил сменить стратегию хранения данных и вынести связанные данные в отдельную таблицу. Теперь пытаюсь понять, как правильно их (данные) в этой таблице хранить.

Суть проблемы примерно следующая:
Есть набор данных, привязанных к какой-то записи (строке). Эти данные имеют смешанный формат (строки, целые числа и дробные числа), по этому, хранятся они в формате VARCHAR.

В зависимости от условий, мы можем работать с этими данными либо как со строкой, либо как с целым. При этом, со строками в общей сложности проблем нет, но когда нужно найти все записи, например, в диапазоне между 10 и 100, например так:
SQL
1
... WHERE column1 >= AND column1 <= 100;
, возникает проблема того, что в выборку попадают в том числе и не числовые значения. Что бы решить эту проблему, бы придуман примерно такой запрос:
SQL
1
SELECT * FROM table1 WHERE column1 ~ E'^\\d+$' AND column1::INTEGER >= 10 AND column1 <= 100
который выбирал по регулярке только числовые значения, приводил их к целому и оперировал уже ими... И всё вроде бы хорошо, но меня смущает наличие регулярного выражения в запросе. Маленького, но всё же регулярного выражения.

В замен регулярного выражения я придумал два других варианта хранения данных:

Вариант 1. Описан выше (с регуляркой).

Вариант 2. Идея заключается в том, что бы создать дополнительное поле, в котором при сохранении либо указывать флаг (true/false) является ли значение числом, либо указывать тип данных (строка/целое/дробное), записывая тип при сохранении. И соответственно конвертировать только те значения, которые могут быть сконвертированы, не прогоняя каждое значение через регулярное выражение.

Вариант 3. Можно создать 2 (или 3) таблицы, в каждой из которых будет храниться свой тип данных (таблица для строк, таблица для целых, таблица для дробных) и соответственно, в зависимости от контекста запроса, искать данные по нужной таблице (тут ещё можно по всякому поизвращаться, на эту тему).

Собственно, вопрос. Какой из методов хранения будет наиболее оптимальным?

Данных много, примерно 1.5млн. записей и примерно 30млн. привязанных к ним свойств. Консистенция данных примерно такая: целые - 70%, строки - 20%, дробные - 10%.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2016, 20:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выбор метода хранения данных в БД (PostgreSQL):

Спроектировать базу данных для хранения данных по организациям и признакам - Базы данных
Помогите, спроектировать базу данных для хранения данных по организациям и признакам.

Структура хранения контактных данных - Базы данных
Как лучше всего хранить контактные данные? Какая должна быть структура таблицы (таблиц) для этого? Нужно хранить: 1) телефоны 2)...

Какой вариант для хранения данных выбрать? - Базы данных
Есть прога. Работает с БД (не суть важно для вопроса с какой). Программа принимает различные данные от пользователя. Номер контракта, дом...

Правильная организация хранения исторических данных для существующей БД - Базы данных
Приветствую всех! Передо мной стоит задача организовать сохранение исторических данных для существующей БД. Организация занимается...

Создать небольшую логическую модель для хранения данных изделий - Базы данных
Доброго времени суток! Имеется такая задача: существует БД изделий. Каждое изделие состоит из каких-то сборок. Сборка в свою очередь...

Выбор модели данных базы данных учета личного состава - Базы данных
Доброго времени суток, уважаемые форумчане! Я работаю Вооруженных Сил РФ. Учет личного состава ведётся на бумажных носителях. Для...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
grgdvo
550 / 486 / 138
Регистрация: 02.09.2012
Сообщений: 1,431
29.11.2016, 15:00 #2
Вариант 3 позволяет использовать дополнительные индексы на конкретные числовые, дробные или строковые данные, что может существенно ускорить поиск по сравнению с Вариантом 2, в котором такие индексы не создашь, так как все лежит в тексте. Поэтому если важна скорость выборки конкретных данных, то лучше вариант 3.
Также Вариант 3 всегда можно привести к Вариант 2 дополнительным представлением, если это вообще требуется.
Однако, неудобство Варианта 2 состоит в усложнении процесса формирования поискового запроса.
Если последнее не доставляет неудобства, то я голосую за Вариант 3
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2016, 15:00
Привет! Вот еще темы с ответами:

Выбор базы данных, поддерживающей большие объемы данных - Базы данных
Доброго времени суток. Прошу совета в подборе клиента баз данных. Необходимо выполнять следующие задачи: -...

Дамп базы данных, место хранения базы (phpmyadmin) - Базы данных
Здравствуйте, стал знакомиться с денвером как возникло множество вопросов относительно базы данных: Во-первых, при создании базы данных в...

Выбор базы данных - Базы данных
Какую выбрать базу данных(перспективную и развивающуюся), гугл советует MySQL или Oracle// если да то посоветуйте хорошую литературу для...

Выбор базы данных - Базы данных
Привет всем, подскажите пожалуйста, какую базу данных выбрать для проекта? База будет использоваться и для телефона и для сайта и для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru