Связанные логические столбцы - отдельные столбцы или упакованные в целочисленный столбец? - PullRequest
2 голосов
/ 26 мая 2010

Здравствуйте. У меня есть база данных для определенной записи, в которой необходимо хранить 1 или 0 для каждого дня недели.Так какой из них будет лучше?Сдвиг каждого бита в целое число и просто наличие в базе данных целого числа с именем days или мы должны сделать все их отдельные логические значения, чтобы иметь sunday, monday, tuesday... столбцы?

Обратите внимание, что эти столбцы используются тольковычисления в нашем программном обеспечении (не в самой БД), поэтому единственное, что будет сделано с этими значениями, это выбор, обновление и вставка.

Ответы [ 3 ]

2 голосов
/ 26 мая 2010

Отдельные столбцы.

Движок БД все равно их упакует и будет работать с битами прозрачно для вас. Я подозреваю, что лучше в этом, чем ты или я, катая наши собственные ...

2 голосов
/ 26 мая 2010

Я бы выбрал отдельные столбцы по следующим причинам:

  • Это может показаться лучше разработанной моделью базы данных (потому что она более четкая, более интуитивная, более понятная), и каждому, вероятно, не понадобятся дальнейшие объяснения;

  • "Какой бит снова был для воскресенья ...? Я назначил ему самый старший бит или самый младший?" - Вы не столкнетесь с такими проблемами с отдельными именованными столбцами ... поэтому меньше возможностей для ошибок.

  • Если позже вы захотите улучшить модель базы данных, чтобы вы могли хранить NULL в течение отдельных дней, вам почти наверняка понадобится отдельный столбец в день. В противном случае вам потребуются как минимум два бита в день (поскольку теперь у вас есть 3 возможных состояния, а 1 для этого больше не достаточно) и соответствующая схема кодирования, запеченная в домашних условиях.

  • Я вполне уверен, что современные РСУБД достаточно умны, чтобы объединить несколько логических столбцов;

0 голосов
/ 26 мая 2010

Это зависит от ваших потребностей. Sql Server страдает от снижения производительности при запросах с бит-смещением. Если вы будете выполнять большую фильтрацию всего за один день для каждого запроса, я бы порекомендовал отдельные битовые поля для каждого дня.

...