0

Когда у меня есть таблица, например, с пользователями, и эта таблица имеет поле типа пользователя, могу ли я просто ввести поле типа пользователя int, а при программировании я знаю, что type = 1 является администратором, и type = 2 других пользователя и т. д.? Или я должен поместить type = "admin", type = "other" в varchar, а затем в приложении любой может понять, какой тип и что представляет каждое значение? Другим решением является создание таблицы UserType, только с «id» и «описанием» и подключением к пользователю, но это хорошо для производительности? Просто знать, что означает идентификатор?Тип поля базы данных int или varchar

Если я использую Int, только тот, кто развивается, знает, что означает 1 и 2. Что является лучшей практикой и плюсами и минусами каждого из них? Спасибо

Таблица пример:

User 
_________ 
id 
name 
email 
type 

ответ

0

Я бы иметь две таблицы users и users_types.

users       users_types 
-----       ----------- 
id INT       id INT 
name VARCHAR(100)    title VARCHAR(20) 
email VARCHAR(100) 
type INT (References user_types(id)) 

Так я всегда это делаю. По следующим причинам:

  • Легко поддерживать и продолжать кто-то еще в мое отсутствие
  • держит столы простые и легкие
  • Повышает производительность
  • Легко расширяется в случае большего числа групп необходимо добавить/(масштабируемость)
  • Пользователи могут быть добавлены или удалены из группы
  • права могут быть назначены партиями.
+0

Обычно я делаю этот путь. Но почему добавление ключевой таблицы ссылок повысит производительность? В стороне приложения быстрее выполнить запрос без объединения, просто с «where type = 2» –

+0

Вы также можете делать то, что находится на двух таблицах. Вы можете придерживаться одной таблицы, если ваше приложение останется маленьким, и вы сохраните его навсегда. Кроме того, было бы лучше отделить группы от пользователей. – pimpace

0

Когда существует небольшое количество довольно статических типов, я часто использовал 3-значную мнемонику вместо целого числа. Используя только заглавные буквы, которые предлагают 17 576 перестановок, многие из которых легко распознаются. Для доказательства рассмотрим, что 50 состояний известны по 2-символьному почтовому индексу и всем аэропортам мира с помощью трехбуквенного кода. Бьюсь об заклад, вы знаете, где LAX.

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

Но если вы не хотите менять схему каждый раз, когда появляется новый тип, отдельная таблица с ограничением FK будет служить вам хорошо. Вы можете использовать представление для включения описательной информации, хотя для многих целей мнемоника будет работать так же хорошо или лучше.

Смежные вопросы