Лучше ли использовать таблицы вместо типа полей массивов в PostgreSql, когда массивы не превышают 50 элементов?
Или лучше сказано: когда использовать массив в качестве типа данных поля в таблице?
Какое решение обеспечивает лучшие результаты поиска?
Ответ 1
Я тоже рассматривал эту проблему и вывод, к которому я пришел, - использовать массивы, когда вы хотите исключить объединение таблиц. Количество элементов, содержащихся в каждом массиве, не так важно, как размер используемых таблиц. Если в каждой таблице всего несколько тысяч строк, то объединение 50 подстрочных строк не должно быть большой проблемой. Если вы попадете в 10 или 100 тысяч или строк, вы, вероятно, начнете пережевывать много процессорного времени и дискового ввода-вывода.
Ответ 2
Я избегаю массивов по двум причинам:
сохраняя в ячейке более одного значения атрибута, вы нарушаете первую нормальную форму (теоретическую);
вам нужно выполнить некоторую дополнительную обработку, не связанную с SQL, каждый раз, когда вам нужно работать с отдельными элементами массивов (практическое, но прямое следствие теоретического).
Ответ 3
Таблицы всегда будут предоставлять лучшие результаты поиска, предполагая, что вы запрашиваете что-то в самом массиве. С помощью подтаблицы вы можете индексировать содержимое тривиально, тогда как с массивом вам нужно будет буквально создать 50 индексов (по одному для каждого потенциального элемента в массиве).
Ответ 4
Я думаю, что массивы должны быть использованы для некоторых пользовательских данных. Но для внешних ключей - лучше использовать таблицу ссылок (или что-то еще, кроме столбца на ключ). Таким образом, у вас есть контроль данных на уровне БД и простые запросы на объединение - вам нужно объединение, даже если они есть в массивах (для полного набора данных), - но массивы гораздо сложнее, чем "стандартный" SQL. PS Извините, плохой английский