Мой первый пост :)Как хранить информацию о разных пользователях в базе данных?
Я только начал изучать Rails и имею некоторые сомнения относительно моделирования базы данных. Я создаю сайт для одного футбольного клуба и имею много разных типов пользователей. Каждый пользователь может зайти на сайт и иметь собственную панель управления. Они также хотят, чтобы каждый пользователь имел отдельную часть на сайте для регистрации. Итак, на моем сайте у меня будут ссылки «Зарегистрируйтесь как игрок» и «Зарегистрируйтесь как тренер».
Они будут мои пользователи на сайте и их атрибуты:
SuperAdmin (id, username, firstName, lastName, password)
Admin (id, username, firstName, lastName, password, is_enabled)
Coach (id, username, firstName, lastName, password, is_enabled, coachRole, salary, contractStarted, contractEnds, vacationDaysLeft)
Player (id, username, firstName, lastName, password, is_enables, salary, contactStarted, contractEnds, birthDate, height, weight, goals, assists, minutesPlayed, gamesPlayed)
Что бы мои варианты здесь?
ВАРИАНТ 1
Я думал о делать что-то вроде этого:
create_table "users", force: true do |t|
t.string "username"
t.string "userRole"
t.boolean "is_enabled"
t.string "firstName"
t.string "lastName"
t.string "password"
t.string "coachRole"
t.integer "salary"
t.datetime "contractStarted"
t.datetime "contractEnds"
t.integer "vacationDaysLeft"
t.datetime "birthDate"
t.integer "height"
t.integer "weight"
t.integer "goals"
t.integer "assists"
t.integer "minutesPlayed"
t.integer "gamesPlayed"
t.datetime "created_at"
t.datetime "updated_at"
end
Колонка UserRole будет иметь значения SuperAdmin, Admin, тренер, игрок. В зависимости от этой роли я могу предоставить доступ к определенным страницам этим пользователям. Проблема в том, что эта таблица выглядит огромной и будет иметь много значений null
.
Например, если я создаю тренер, строка в таблице будет иметь следующие значения:
Тренер [ "имя пользователя", "Тренер", "is_enabled", "FirstName", "LastName", «пароль «coachRole», «зарплата», «contractStarted», «contractEnds», «vacationDaysLeft», null, null, null, null, null, null, null, «created_at», «updated_at»]
Я создаю Admin, он будет иметь следующие значения:
Admin ["username", "Admin", "is_enabled", "firstName", "lastName", "pas меч ", null, null, null, null, null, null, null, null, null, null, null, null," created_at "," updated_at "]
Итак, только у игрока действительно будет некоторая польза этот подход.
ВАРИАНТ 2
Во-вторых, я думал сделать, это создать одну «базовую» модель пользователя, которая будет содержать общую информацию:
create_table "users", force: true do |t|
t.string "username"
t.string "userRole"
t.boolean "is_enabled"
t.string "firstName"
t.string "lastName"
t.string "password"
t.string "type"
end
, а затем для всех других моделей для создания новых моделей :
class SuperAdmin < User
end
class Admin < User
end
class Coach < User
end
class Player < User
end
Но тогда я прочитал, что у меня будет такая же проблема, потому что все эти столбцы снова будут в одна и та же строка для каждого пользователя. Теперь я действительно не уверен, как справиться с этой ситуацией. Мне не нужны никакие дополнительные драгоценные камни для аутентификации и авторизации. Я хочу сделать это сам, чтобы учиться как можно больше.
Я очень ценю ваше время, помогая мне справиться с этим. Спасибо.
Спасибо. Было бы снова несколько нулевых полей, поэтому мне было интересно, что вы думаете, если бы я сделал 2 таблицы вроде этого. Например, CoachProperties и PlayerProperties. Таким образом, я могу легко добавить еще один столбец для каждого свойства, и для добавления новых пользовательских ролей лучше добавить новые роли. Как вы думаете, это будет плохой дизайн? – user3304086
Не должно иметь нулевых полей. То, что я имею в виду, это свойства таблицы, всего 2 столбца, о которых вам нужно позаботиться, «ключ», «значение», ключ может быть «зарплата» или «coachRole», значение может быть «10000» или «некоторая роль». Если у пользователя нет свойства «зарплата», то такой записи в таблице свойств нет. Все столбцы в свойствах таблицы могут быть «id», «key», «value», «user_id». «зарплата» является частью содержания записи, а не колонки. – lalameat
Ага, я понял! Таким образом, таблица свойств будет содержать только эти столбцы: id, ключ и значение. Затем после каждого пользовательского регистра я создавал бы определенные свойства. То, что я не понимаю, так это то, как я покажу это в форме для регистрации. Если у меня будет form_for @user, как будут обрабатываться эти свойства? Они не будут видны. – user3304086