我正在开发一个具有不同类型用户的应用程序,即学生,导师和管理员。但是,我最初将我的数据库设置为只有两个表:Users(包含所有类型共有的所有登录信息)和Profiles(包含所有其他信息;尽管每列适用于某种类型的用户)。
我想也许我应该有用户,每种类型有3个单独的表,即学生,导师和管理员。但是,如何将这三个表与Users表链接?我相信会有一个桥牌桌,但我不太清楚如何做到这一点。
答案 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)
USER_TYPE
表,包含userType
和userTypeID
列。USER
表,其中包含userID
列加登录信息,加一个userTypeID
列,链接到USER_TYPE
} table。USER_STUDENT
表,其中包含与学生相关的列, plus 一个userID
列,链接到USER
表。USER_TUTOR
表,其中包含与教师相关的列, plus 一个userID
列,链接到USER
表。USER_ADMINISTRATOR
表,其中包含管理员相关列, plus 一个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'
答案 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