При проектировании таблиц базы данных для хранения простой информации о пользователе/роли, может ли кто-нибудь сказать мне, почему было бы плохой идеей хранить информацию о роли непосредственно в таблице пользователей (например, с разделителями-запятыми в столбце ролей).
Мысли:
- Базе данных не нужно знать о ролях, это область пользовательского интерфейса.
- Чем быстрее доступ к ролям конкретного пользователя, тем лучше
- Конечно, если когда-нибудь в будущем я захочу получить доступ ко всем пользователям для определенной роли, запрос может
быть немного медленным, но кого это волнует в этот момент?
Есть ли в этом смысл? Я сошел с ума? Не будет ли создание таблиц Roles и UserRole излишним и добавит ненужные накладные расходы на SQL и код?
ОБНОВИТЬ:
Чтобы еще больше проиллюстрировать мою точку зрения... в коде я хочу знать, находится ли пользователь «Стив» в роли «Администратор».
Вариант 1: запросите в таблице UserRole список ролей для пользователя «Стив». Прокрутите этот список и посмотрите, соответствует ли RoleName «Администратору».
Вариант 2: разделите CSV в свойстве «Роль пользователя» и посмотрите, содержит ли результирующий список «Администратор».
ОБНОВЛЕНИЕ II:
Я согласен с тем, что мое предложение нарушает все виды мышления типа «лучшая практика», особенно в отношении дизайна БД. Однако я не вижу смысла в «лучших практиках» в такого рода сценариях. Мне нравится время от времени раскачивать лодку лучших практик ... Мне нравится кодировать так, чтобы это казалось умным, а это значит, что иногда мне нужно больше понимать, чтобы знать, когда я не умный :)
SELECT RoleName from UserRole where user = 'Steve' and RoleName = 'Administrator';. Этот запрос должен вернуть одну строку, если Стив является администратором, и ни одной строки, если он им не является. Без зацикливания. Без разделения. (Вы могли бы так же легко вернуть имя пользователя, или целое число, или логическое значение. Опять же, без циклов и без разбиения.) Меня беспокоит, что это очень, очень просто - это то, что я ожидаю от неоплачиваемого стажера. правильно каждый раз. Но ты ошибся. - person Mike Sherrill 'Cat Recall'   schedule 07.06.2011