如何将此父表与其不同的子表连接?

时间:2012-01-19 03:02:56

标签: sql roles multiple-tables

我正在开发一个具有不同类型用户的应用程序,即学生,导师和管理员。但是,我最初将我的数据库设置为只有两个表:Users(包含所有类型共有的所有登录信息)和Profiles(包含所有其他信息;尽管每列适用于某种类型的用户)。

我想也许我应该有用户,每种类型有3个单独的表,即学生,导师和管理员。但是,如何将这三个表与Users表链接?我相信会有一个桥牌桌,但我不太清楚如何做到这一点。

4 个答案:

答案 0 :(得分:1)

您可以将Users表的主键作为外键添加到3个单独表中的每个表中。

希望这有帮助。

答案 1 :(得分:1)

这应该是一个坚实的起点。定义听起来没问题的表,然后使用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)

答案 2 :(得分:1)

  1. USER_TYPE表,包含userTypeuserTypeID列。
  2. USER表,其中包含userID登录信息,一个userTypeID列,链接到USER_TYPE } table。
  3. USER_STUDENT表,其中包含与学生相关的列, plus 一个userID列,链接到USER表。
  4. USER_TUTOR表,其中包含与教师相关的列, plus 一个userID列,链接到USER表。
  5. USER_ADMINISTRATOR表,其中包含管理员相关列, plus 一个userID列,链接到USER表。
  6. 您可以加入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'
    

答案 3 :(得分:1)

另一种方法是引入一个“角色”表来定义系统中的角色/配置文件的类型(学生,管理员,导师......),然后添加一个映射表“user_role”,将用户映射到角色(即John既是学生又是教师,意味着“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