Teradata: как спроектировать таблицу для нормализации со многими столбцами внешнего ключа?

Я разрабатываю таблицу в Teradata примерно с 30 столбцами. В этих столбцах потребуется хранить несколько значений временного интервала, таких как «Ежедневно», «Ежемесячно», «Еженедельно» и т. д. Сохранение фактических строковых значений в таблице — плохой дизайн, поскольку это будет ужасным повторением данных. Вместо этого я хочу создать примитивную таблицу поиска. Эта таблица будет содержать значения Daily, Monthly, Weekly и будет использовать столбец идентификаторов Teradata для получения первичного ключа. Затем этот первичный ключ будет храниться в таблице, которую я создаю как внешние ключи.

Это отлично сработает для моего приложения, поскольку все, что мне нужно знать, это значение примитивного ключа, когда я заполняю раскрывающиеся списки моей веб-формы. Однако другие приложения, которые мы используем, должны будут либо запускать отчеты, либо получать эти данные через фиды. Следовательно, необходимо будет создать представление, которое соединяет эту таблицу с таблицей примитивов, чтобы оно могло фактически возвращать Daily, Monthly и Weekly.

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

Редактировать: я полагаю, я должен добавить, что эта таблица поиска будет мешаниной несвязанных примитивов. Он будет содержать группу значений, относящихся к временным интервалам, как уже упоминалось выше, а также временные рамки, такие как 24x7 и 8x5. Таблица будет выглядеть следующим образом:

ID  Type         Value
--- ------------ ------------
1   Interval     Daily
2   Interval     Monthly
3   Interval     Weekly
4   TimeFrame    24x7
5   TimeFrame    8x5

Редактировать часть 2: добавлен новый тег, чтобы получить больше информации об этом вопросе.


person oscilatingcretin    schedule 26.04.2012    source источник


Ответы (1)


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

Одна вещь, которую я могу порекомендовать, это иметь дополнительную строку в таблице поиска, например:

ID  Type         Value
--- ------------ ------------
0   Unknown      Unknown

Затем в основной таблице вместо пустых полей вы бы присвоили им значение 0. Это позволяет использовать внутренние соединения вместо внешних, что повышает производительность.

person lins314159    schedule 26.04.2012
comment
Отказался от этого вопроса, так как пошел другим путем в своем развитии. Не пробовал ваше предложение, но не могу удалить этот вопрос и не могу просто оставить его без ответа навсегда, поэтому я отмечаю его. - person oscilatingcretin; 04.05.2012