2012-01-19 24 views
0

我正在研究具有不同類型用戶的應用程序,即學生,導師和管理員。然而,我最初設置我的數據庫只有兩個表:用戶(包含所有類型通用的所有登錄信息)和配置文件(包含所有其他信息;儘管每列適用於特定類型的用戶)。如何連接此父表與其不同的子表?

我在想也許我應該有用戶,併爲每個類型,即學生,導師和管理員3個單獨的表。但是,如何將這三個表與Users錶鏈接?我確信會有橋牌桌,但我不太確定該怎麼做。

回答

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) 
+0

非常感謝。 – Mikey

1

您可以將Users表的主鍵作爲外鍵添加到3個獨立表中的每個表。

希望這會有所幫助。

1
  1. USER_TYPE表,含有userTypeuserTypeID列。
  2. USER表,含有userID登錄信息,一個userTypeID柱,連接到USER_TYPE表。
  3. USER_STUDENT表,包含學生相關列, a userID列,鏈接到USER表。
  4. USER_TUTOR表中,包含導師相關列, a userID列,鏈接到USER表。
  5. USER_ADMINISTRATOR表,包含管理員相關列, a 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

的另一種方法是引入「角色」表,其限定系統中的角色/配置文件的類型(學生,管理員,導師...),然後添加一個映射表「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