@symnoob

Как оптимально построить таблицу?

Всем Привет,

У меня есть задача осуществить валидацию на основе дополнительной таблицы в базе данных:

Существует таблица период, там в принципе только период времени: от - до

К этой таблице "период" необходимо создать отношение к таблице "тарифы" 1:n (каждый период может иметь только одну такую таблицу тариф, но каждый тариф может быть подвязан к многим периодам)

даты для каждого тарифа выглядят примерно так(как таблица пифагора):

6274fed126c43172768035.png

вот теперь вопрос как построить таблицу или может необходимо сразу две таблицы для тарифа?
  • Вопрос задан
  • 84 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Akela_wolf
Extreme Programmer
Я бы сделал так (сводя все к какой-то там нормальной форме)
Таблица "Период" (содержит периоды)
Таблица "Тариф" (содержит названия "Тариф 1", "Тариф 2" и т.д.)
Таблица "Группа" ("Группа 1", "Группа 2" и т.д.)
Таблица "Значение тарифа" (ссылается на таблицу "Тариф", "Группа" и содержит соответствующее этому сочетанию значение тарифа)
Таблица "Период-Тариф" (связывает период с тарифом)

Это вот то что прямо описано в вопросе.
НО!
По опыту работы с тарифами скажу - там не просто типичная, а типичнейшая тема: история тарифов. А именно: почему месяц назад посчиталось по такому-то значению? Или изменить значение тарифа вот прямщас, но чтобы действовать начало с понедельника.
Даже если этих требований сейчас нет - они вполне могут появиться.
Ответ написан
ThunderCat
@ThunderCat Куратор тега MySQL
{PHP, MySql, HTML, JS, CSS} developer
Сразу видно несколько проблем:
1) У таблицы нет индекса (2 нф), возможно это пока только представление в экселе, но надо учесть.
2) Очевидно что таблица имеет тенденцию к расширению по столбцам, что, очевидно, плохо.
3) п.2 в том числе образуется из-за смешивания сущностей в одной таблице, которые нужно разнести по рзным таблицам и связывать пивот таблицами (3 нф).

Вообще вам больше и точнее подойдет Нормальная форма Бойса-Кодда, хорошо и просто описанная здесь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы