1. SQL / Говнокод #12267

    −161

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 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

    Запостил: smpl, 10 Декабря 2012

    Комментарии (12) RSS

    • >таблицу holiday в эту таблицу записи ручками вносятся о выходных днях или о праздниках
      Ну выходные можно рассчитать а с праздниками что не так ?
      Ответить
      • там и выходные и праздничные дни, то есть выходной день это и есть праздничный и туда вносится.
        Ответить
    • Вот такие как вы заполняете такие календари на ближайшие 150лет, ибо нех в такой таблице хранить больше 65365 значений, а потом у людей крышу рвет, апокалипсис и всё такое...
      Ответить
      • ога потом кто-нибудь в будущем откапает смотрите это sql календарь о боже смотрите они ни стали заполнять через 100500 лет и все будут думать всё им хана, апокалипсис все дела, я это теперь так и буду называть календарь мая.
        Ответить
    • Не говно. Существует злоебучая традиция переносить выходные к праздникам и переносы утверждаются советом министров за 2 месяца вручную.
      Ответить
      • >Не говно
        Всё говно. И даже небо. И даже алах.
        Ответить
      • я один вижу вот это?
        caldate date NOT NULL,
          "month" integer NOT NULL,
          month_txt character varying(10) NOT NULL,
          "year" integer NOT NULL,
        Ответить
        • Да. Текст написан прозрачным шрифтом.
          Ответить
        • month_txt — название месяца? Что ж, этому есть обоснование. Жил да был император, в честь которого сенат переименовал месяц. Но даже этого императору показалось мало, поэтому он накинул к этому месяцу один день. Читать далее >>>

          Глупо при разработке программ не предусматривать возможность подобных событий.
          Ответить
    • Ну календарь обычно в хранилищах данных генерится до 9999 года без проблем и на все дни.
      Если праздники для одного региона, то просто добавляем флаг IsHoliday. До 3-х регионов, можно еще использовать дополнительные флаги (пр. IsHolidayRu, IsHolidayUa, IsHolidayBy). Больше трех регионов, конечно уже лучше создавать отдельную табличку. Но, во всех 3-х случаях праздники обычно проставляются на весь период времени, до 9999 года и если какой-то закон изменяет нормальный ход событий, то изменяется дата праздника. Зачем вручную постоянно заносить?
      Ответить
    • Дата является первичным ключом… Да! Ибо зачем ещё нужны даты, как не затем, чтобы придать веса ключу?
      Так… Дата является ключом для — внимание — даты! О, конечно! Ведь для чего использовать дату в ключе, как не для даты в значении?
      В таблице храним номер месяца даты, название месяца даты и номер года… Тут всё ясно… Триста шестьдесят пять дат — триста шестьдесят пять две тысячи одиннадцатых годов. Ну, а как же? Это ж база данных — так пусть хранит одинаковых данных побольше!
      А это что за просчёт? Почему в таблице дат не хранится номер дня в месяце, номер дня в неделе, название дня недели, номер дня в году, номер недели в году, признак високосности года и фамилия проектировщика базы данных для каждой даты?

      smpl, сочувствую и желаю мужества в работе с проектом. Теперь понимаю, что моя печаль по поводу некоторых достававшихся мне проектов это ничто по сравнению с этой ношей.
      Ответить
      • Мне однажды попался навязанный заказчиком знаток баз, сказали что он мне базу спроектирует... Там вообще ключей не оказалось. :) Даже первичных. :)
        Ответить

    Добавить комментарий