Таблица с множеством логических полей «status» - PullRequest
3 голосов
/ 20 апреля 2011

У меня есть таблица, которая представляет объект, который имеет несколько «статусов» (утвержден, просрочен, имеет тенденцию, реален). Все эти статусы независимы, поэтому я не могу иметь как одно поле статуса, потому что могут быть сделаны запросы, поэтому вы можете спросить:

select * from Objects WHERE approved is true, trending is true, expired is false;

Я не уверен, есть ли способ нормализовать такую ​​таблицу. Кроме того, насколько я понимаю, использование индексов для этих полей было бы бесполезно. Это верно и для этого случая?

Спасибо!

1 Ответ

5 голосов
/ 20 апреля 2011

Аргумент против большого количества столбцов логического статуса не связан с пробелом или даже нормализацией как таковой. Если каждый столбец полностью относится к ключу и не состоит из амальгамы значений, он достаточно нормализован (3-я норма). Скорее проблема заключается в логической природе столбцов и их отсутствии расширения. Например, вы показали нам столбец с именем approved. Как насчет даты, когда она была одобрена и кем? Что произойдет, если конвейер утверждения расширится и будет включать больше состояний, чем просто утвержденных / не утвержденных, таких как initiated, pending, approved и rejected? Как насчет описания статуса одобрения? Сегодня это может быть Y/N, но завтра ваши клиенты могут захотеть Approved/Rejected или, возможно, Qui/Non.

Я не предлагаю вам перевернуть свой дизайн с ног на голову; логические столбцы имеют свое место. Однако их следует использовать после тщательного изучения возможностей расширения и расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...