Как мне связать эту родительскую таблицу с разными дочерними таблицами? - PullRequest
0 голосов
/ 19 января 2012

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

Я подумал, что, может быть, у меня должны быть пользователи и 3 отдельные таблицы для каждого типа, т. Е. Студенты, преподаватели и администраторы. Однако как связать эти три таблицы с таблицей Users? Я уверен, что был бы стол для бриджа, но я не слишком уверен, как это сделать.

Ответы [ 4 ]

1 голос
/ 19 января 2012

Другой подход заключается во введении таблицы «ролей», которая определяет тип ролей / профилей в вашей системе (студент, администратор, преподаватель, ...), а затем добавление таблицы сопоставления «user_role», которая отображает пользователей на роли ( т. е. Джон является одновременно учеником, а учитель подразумевает две записи в таблице «user_role». Информация о конкретной роли для пользователя может быть в таблицах, показанных ниже как «подробные» таблицы.

    USER
    ----
    user_id
    username
    password

    ROLE
    ----
    role_id
    role_name

    USER_ROLE
    ----------
    user_role_id
    user_id
    role_id
    from_date
    to_date

    STUDENT_DETAIL
    --------------
    user_role_id
    student_number

    TUTOR_DETAIL
    ------------
    user_role_id
    sin
1 голос
/ 19 января 2012

Это должно быть хорошей отправной точкой для вас.Определите таблицы, с которыми, по вашему мнению, все в порядке, затем примените отношения с помощью команды ALTER TABLE.Смотри ниже.

CREATE TABLE Users
(
ID INT IDENTITY (1,1),
PRIMARY KEY (ID),
UserName VARCHAR(20),
Password VARCHAR(20)
)

CREATE TABLE Students
(
ID INT IDENTITY (1,1),
PRIMARY KEY (ID),
UserID INT --foreign key to Users.ID column
--Other columns
)

CREATE TABLE Tutors
(
ID INT IDENTITY (1,1),
PRIMARY KEY (ID),
UserID INT --foreign key to Users.ID column
--Other columns
)

CREATE TABLE Administrators
(
ID INT IDENTITY (1,1),
PRIMARY KEY (ID),
UserID INT --foreign key to Users.ID column
--Other columns
)
--Apply foreign key relationships
ALTER TABLE Students
ADD FOREIGN KEY (UserID)
REFERENCES Users(ID)

ALTER TABLE Tutors
ADD FOREIGN KEY (UserID)
REFERENCES Users(ID)

ALTER TABLE Administrators
ADD FOREIGN KEY (UserID)
REFERENCES Users(ID)
1 голос
/ 19 января 2012
  1. USER_TYPE таблица, содержащая userType и userTypeID столбцы.
  2. USER таблица, содержащая userID столбец плюс информация для входа в систему, плюс a userTypeID столбец, связанный с таблицей USER_TYPE.
  3. USER_STUDENT таблица, содержащая столбцы, связанные со студентом, plus a userID столбец, связанный с USER таблица.
  4. USER_TUTOR таблица, содержащая столбцы, относящиеся к репетитору, плюс a userID столбец, связанный с таблицей USER.
  5. USER_ADMINISTRATORтаблица, содержащая связанные с администратором столбцы, плюс столбец userID, ссылающийся на таблицу USER.

Вы можете присоединиться к 1, 2 и {3 или 4 или 5} таблицы, как показано ниже, и аналогичными другими способами:

SELECT U.*, S.*
FROM USER as U
     INNER JOIN USER_TYPE AS UT ON UT.userTypeID = U.userTypeID
     INNER JOIN USER_STUDENT AS US ON US.userID = U.userID
WHERE UT.userType = 'STUDENT'
1 голос
/ 19 января 2012

Вы добавили бы первичный ключ таблицы Users в качестве внешнего ключа к каждой из 3 отдельных таблиц.

Надеюсь, это поможет.

...