Oracle — Создать одну таблицу со многими столбцами или разделить на множество таблиц

#database #oracle

#База данных #Oracle

Вопрос:

Каков наилучший способ моделирования базы данных? У меня есть много известных каналов со значениями. Лучше создать одну таблицу со многими столбцами, по одному для каждого канала или создать две таблицы, одну для значений и одну для каналов? Вот так:

Таблица RAW_VALUES: SERIE_ID, CHANNEL_1, …, CHANNEL_1000

или

Таблица RAW_VALUES: SERIE_ID, CHANNEL_ID, ЗНАЧЕНИЕ

КАНАЛЫ таблицы: CHANNEL_ID, NAME, UNIT, ….

Мой вопрос касается производительности для поиска некоторых данных или экономии места в базе данных.

Спасибо.

Ответ №1:

Обычно хотелось бы знать, какой тип запросов вы будете выполнять к таблицам, а также распределение данных и т.д., Чтобы выбрать между двумя проектами. Тем не менее, я думаю, что здесь есть более фундаментальные вопросы, которые помогут вам.

Вторая альтернатива, безусловно, более гибкая. Добавление еще одного канала («Channel_1001») можно выполнить, просто вставив строки в две таблицы (простая операция DML), тогда как при использовании первого варианта вам нужно добавить столбец в таблицу (операция DDL), и это не будет использоваться никакими программами, использующими эту таблицу, если вы не измените их.

Один только этот тип гибкости, вероятно, является хорошей причиной для выбора второго варианта.

Поиск также будет лучше обслуживаться вторым вариантом. Вы можете создать один индекс в таблице raw_values и поддерживать индексированный поиск по столбцам канала / значения. (Кстати, я бы избегал названия «значение» для столбца.)

Теперь, если вы решите, какие столбцы индексировать в соответствии с первым вариантом, вы, вероятно, будете в тупике: у вас там 1001 столбец. Если вы хотите поддерживать индексированный поиск по значениям, вы бы проиндексировали их все? Даже если бы вы имели дело всего с 10 каналами, вам все равно нужно было бы проиндексировать эти 10 столбцов в соответствии с вашим первым вариантом; в целом не очень хорошая идея загружать таблицу с более чем несколькими индексами.

Кроме того, если я не ошибаюсь, в наши дни ограничение составляет 1000 столбцов на таблицу, но таблица с более чем 255 столбцами будет хранить строку в нескольких частях строк, каждая из которых содержит 255 столбцов, и это создало бы множество операций ввода-вывода, которых можно избежать при каждом выборе, который вы производите в отношении этой таблицы.