Это более старая статья, но я подумал, что я буду взвешиваться с концептуальной, процедурной и производственной точек зрения.
Первый вопрос, который я хотел бы задать, - это отношения между человеком, специалистом и пользователем, и может ли кто-то быть и специалистом и пользователем одновременно. Или любая другая из 4 возможных комбинаций (класс a + b, класс b + c, класс a + c или a + b + c). Если этот класс хранится в виде значения в поле type
и, следовательно, будет сворачивать эти комбинации, и этот коллапс будет неприемлемым, то я думаю, что потребуется вторичная таблица, учитывающая отношение «один ко многим». Я узнал, что вы не судите об этом, пока не оцените использование и стоимость потери информации о вашей комбинации.
Другой фактор, который заставляет меня склоняться к одной таблице, - это ваше описание сценария. User
является единственной сущностью с именем пользователя (скажем, varchar (30)) и паролем (скажем, varchar (32)). Если возможная длина общих полей составляет в среднем 20 символов на 20 полей, то увеличение размера столбца составляет 62 на 400, или около 15% - 10 лет назад, это было бы дороже, чем в современных системах RDBMS, особенно с доступен тип поля, например varchar (например, для MySQL).
И, если безопасность вас беспокоит, может быть полезно иметь вторичную таблицу «один к одному» под названием credentials ( user_id, username, password)
. Эта таблица будет вызываться в JOIN контекстуально, например, во время входа в систему, но структурно отделена от просто «любого» в основной таблице. И LEFT JOIN
доступно для запросов, которые могут рассматривать «зарегистрированных пользователей».
Мое основное внимание в течение многих лет все еще заключается в рассмотрении значения объекта (и, следовательно, возможной эволюции) вне БД и в реальном мире. В этом случае все типы людей имеют бьющиеся сердца (я надеюсь), а также могут иметь иерархические отношения друг с другом; поэтому, в глубине души, даже если не сейчас, нам может понадобиться сохранить такие отношения другим способом. Это явно не связано с вашим вопросом здесь, но это еще один пример выражения отношения объекта. И к настоящему времени (7 лет спустя) у вас должно быть хорошее понимание того, как ваше решение сработало в любом случае:)