Заявлену в першому дописі тему можна висвітлити декількома абзацами (на базовому рівні).
Візьмемо вимірювати якусь кількісну подію за кожен день тижня. Маємо таблицю events з колонками:
номер дня тижня, назва дня тижня, кількість подій за цей день тижня
Це ненормалізована таблиця, бо назва дня тижня повторюватиметься і це текст - так робити не є грамотно, але часто таке все одно трапляється, наприклад якщо це робив аналітик а не DBA. При цьому аналітик міг би й не включати колонку з номером тижня, це я забігаю трохи наперед.
назва дня тижня, кількість подій за цей день тижня
Ось колонки в нашій таблиці, яка створена аналітиком. Тепер дивимося як натомість зробити правильно.
В даному випадку таблиця events повинна містити колонки:
номер дня тижня, кількість подій за цей день тижня
Для того щоб кінцевий результат був юзер-френдлі, назва дня тижня нам все одно потрібна, але для цього створюємо окрему таблицю яку умовно назвемо "словником" week - це буде пояснення, що означає кожен номер тижня. Це здається трохи безґлуздим, але в різних країнах номери тижнів означають інше, наприклад десь перший день це неділя а в інших країнах перший день це понеділок.
номер дня тижня, назва дня тижня
Тепер в таблиці week номер дня тижня буде primary key, унікальним значенням. А в таблиці events номер дня тижня буде пов'язаним за допомогою foreign key із колонкою номер дня тижня в "словнику" week. Таким чином після створення згаданого foreign key в таблицю events неможливо буде внести запис де номер тижня = 8, оскільки такого запису не існує в "словнику" week.
----
А є ще країни де перший день це субота - ось табличка англійською
http://chartsbin.com/view/41671