Одна большая таблица, разбитая на разделы и затем разбитые на разделы, или несколько небольших многораздельных таблиц?

В настоящее время у меня есть несколько таблиц аудита, которые проверяют данные конкретных таблиц.

например Аудит ATAB_AUDIT, BTAB_AUDIT и CTAB_AUDIT вставляет, обновляет и удаляет из ATAB, BTAB и CTAB соответственно.

Эти таблицы аудита разделены по годам.

Поскольку столбцы в этих таблицах аудита идентичны (change_date, old_value, new_value и т. Д.), Было бы полезно использовать одну большую таблицу аудита, добавьте столбец, содержащий имя таблицы, которая сгенерировала запись аудита (table_name), разделив ее по table_name а потом разбивка по годам?

База данных - Oracle 11g на Solaris.

Почему или почему не делать этого?

Спасибо заранее.


person Ollie    schedule 15.07.2011    source источник


Ответы (1)


Я предполагаю, что характеристики производительности будут примерно одинаковыми при любом подходе. Я бы принял это решение исключительно на основании того, как вы решили моделировать свои данные; именно так ваше приложение (я) хочет взаимодействовать с базой данных. Я не думаю, что ваша стратегия разделения повлияет на это решение (по крайней мере, в этом примере).

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

person James Scriven    schedule 15.07.2011
comment
Спасибо за ответ. Меня беспокоит, что подход с одной таблицей может действительно привести к очень большой таблице. Я не хочу, чтобы это стало неуправляемым. Поскольку все столбцы аудита одинаковы, кажется логичным сгруппировать данные вместе. - person Ollie; 15.07.2011
comment
Я не говорю, что вам не следует использовать разделы, вероятно, это хорошая идея. Просто не имеет значения, есть ли у вас два уровня разделов в одной большой логической таблице или один уровень разделов в трех меньших таблицах. физические таблицы в конечном итоге будут одинакового размера. - person James Scriven; 15.07.2011
comment
Согласен, это больше о том, где хранятся эти данные, чем о том, сколько хранится. Можете ли вы подумать о каких-либо недостатках хранения его в одной таблице? Преимущества заключаются в том, что все данные аудита хранятся вместе, я все еще могу создавать представления, если пользователям нужен доступ к информации аудита определенных таблиц и большему количеству многократно используемых SQL-операторов - меньше жестких синтаксических анализов при доступе к информации аудита. - person Ollie; 15.07.2011
comment
Хороший момент по поводу взглядов. Я бы сказал, используйте одну таблицу для данных аудита. Это предохраняет вашу схему от загромождения журналами аудита. Я не могу придумать никаких недостатков, если учесть вашу способность разбивать на разделы для повышения производительности, если это необходимо. - person James Scriven; 15.07.2011
comment
@ Джеймс: Мне нравится ваш ответ, но, будучи придирчивым, я напомню вам название этого (анти) паттерна: нормализация. Если таблицы содержат идентичные данные - и различаются только по годам и целевым показателям (таблица), то нормализация диктует, что они должны быть в одной таблице, верно? - person ypercubeᵀᴹ; 15.07.2011
comment
@ypercube: Думаю, я искал имя Key Value Pair (KVP). См. stackoverflow.com/questions/126271/ например. - person James Scriven; 15.07.2011
comment
@ Джеймс: Тогда ладно. Я думаю, это также называется EAV (Entity-Attribute-Value): stackoverflow.com/questions/870808/ - person ypercubeᵀᴹ; 15.07.2011
comment
@ypercube: Спасибо, это то, что я искал. Я думаю, что вопросы, обсуждаемые в этом вопросе, хорошо связаны с этим вопросом. - person James Scriven; 15.07.2011
comment
Я только что прочитал оба упомянутых вопроса. Некоторых я знал, некоторых нет, поэтому спасибо, очень информативно. Я собираюсь использовать вариант нормализованной единой таблицы. Я просто не могу согласовать разделение практически идентичных данных на множество почти идентичных таблиц. - person Ollie; 17.07.2011
comment
@Ollie - Я смотрю на похожую ситуацию, хотя и совсем другую. Я собираюсь разбить данные на разные таблицы и просто хотел объяснить, почему в моей ситуации это имело смысл. Таблицы находятся в разных базах данных для экономии места, и одна из них - архив. - person Travis J; 05.04.2012