- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
CREATE TABLE calendar
(
caldate date NOT NULL,
"month" integer NOT NULL,
month_txt character varying(10) NOT NULL,
"year" integer NOT NULL,
CONSTRAINT calendar_pkey PRIMARY KEY (caldate)
)
CREATE TABLE holiday
(
id numeric(10,0) NOT NULL DEFAULT nextval('holiday_seq'::regclass),
caldate date NOT NULL,
region integer,
CONSTRAINT holidaypk PRIMARY KEY (id),
CONSTRAINT fk_hday_caldate FOREIGN KEY (caldate)
REFERENCES calendar (caldate) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT holidayfk FOREIGN KEY (region)
REFERENCES region (id) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
Вот такая вот структура база в проекте в котором я работаю.
Причём помимо таблицы calendar и дублирование там информации, обратите внимание на таблицу holiday в эту таблицу записи ручками вносятся о выходных днях или о праздниках, как впрочем и в таблицу calendar
Vasiliy 10.12.2012 13:56 # 0
Ну выходные можно рассчитать а с праздниками что не так ?
smpl 10.12.2012 16:01 # 0
bliznezz 10.12.2012 14:55 # +5
smpl 10.12.2012 15:58 # +3
PascalGovno 10.12.2012 16:18 # 0
LispGovno 10.12.2012 16:39 # −2
Всё говно. И даже небо. И даже алах.
smpl 10.12.2012 21:49 # 0
LispGovno 10.12.2012 23:53 # −4
inkanus-gray 11.12.2012 04:20 # +3
Глупо при разработке программ не предусматривать возможность подобных событий.
DBdev 10.12.2012 16:54 # 0
Если праздники для одного региона, то просто добавляем флаг IsHoliday. До 3-х регионов, можно еще использовать дополнительные флаги (пр. IsHolidayRu, IsHolidayUa, IsHolidayBy). Больше трех регионов, конечно уже лучше создавать отдельную табличку. Но, во всех 3-х случаях праздники обычно проставляются на весь период времени, до 9999 года и если какой-то закон изменяет нормальный ход событий, то изменяется дата праздника. Зачем вручную постоянно заносить?
wissenstein 11.12.2012 01:26 # +8
Так… Дата является ключом для — внимание — даты! О, конечно! Ведь для чего использовать дату в ключе, как не для даты в значении?
В таблице храним номер месяца даты, название месяца даты и номер года… Тут всё ясно… Триста шестьдесят пять дат — триста шестьдесят пять две тысячи одиннадцатых годов. Ну, а как же? Это ж база данных — так пусть хранит одинаковых данных побольше!
А это что за просчёт? Почему в таблице дат не хранится номер дня в месяце, номер дня в неделе, название дня недели, номер дня в году, номер недели в году, признак високосности года и фамилия проектировщика базы данных для каждой даты?
…
smpl, сочувствую и желаю мужества в работе с проектом. Теперь понимаю, что моя печаль по поводу некоторых достававшихся мне проектов это ничто по сравнению с этой ношей.
Lowezar 11.12.2012 02:01 # +1