2011-06-06 69 views
0

我有一個user表和userid (pk), password, usertype使用SQL Server 2005的數據庫設計,

我有另一個表studentstdid (pk), stdname, stdaddress

我有第三個表facultyfacid (pk), facname, facaddress

我想要做的是用student表或faculty表中的pk填充user表。

如何在SQL Server中實現這個2005

有人能幫助我嗎?

編輯下面

在我的數據庫,學生和教師表已實現爲另一模塊的一部分。我需要在局域網上實現身份驗證部分,以便能夠從任何地方訪問,所以我無法重構該部分。所以我在該表中使用用戶表和用戶名(username)和密碼。

userid是stdid或facid,也是用戶表的pk。

+0

這三張表是如何相關的?你沒有提到任何外鍵。 – 2011-06-06 13:13:43

+2

只是一個觀察,但請不要把前綴放在像fac和std這樣的列上 – 2011-06-06 13:15:32

+0

但是永遠不要使用ID。它可能會導致報告中的問題以及聯接中的錯誤,並非所有藝術都是好的做法。拼出教師或學生。 – HLGEM 2011-06-06 14:12:05

回答

0

你有什麼是一個糟糕的設計。你不想在表格中使用一個或另一個PK作爲PK。這不能每一個工作。當你試圖插入學生10(誰是喬·瓊斯)時,會發生什麼,但是教師10(瑪麗·史密斯)已經在桌子上了。那麼,插入將失敗,因爲PK的獨特要求。

如果所有studetns和faculty都是用戶,那麼userID是PK,FacultyId和StudentID是該表的FK,而不是相反。

+0

所有stdid的前綴都是'S',所有facid的前綴都是'F'。 – Rabin 2011-06-07 01:52:28

+0

這並沒有消除正確設計的需要。 – HLGEM 2011-06-07 15:22:49

+0

所以,我應該得到一個用戶名爲pk並獲得另一個字段來放置stdid或facid? – Rabin 2011-06-12 04:38:12

0

INSERT INTO USER_TABLE(選擇facid從facultaty_table工會用戶ID選擇stdid從student_table用戶ID)

這將離開柱的密碼和用戶類型爲空,否則它抽了userid_table與其他所有的PK

+0

如果stdid和facid來自重疊域? – 2011-06-06 13:19:43

+0

像dublicates? – Mike 2011-06-07 12:02:10

0

密鑰的數據類型是什麼?是否有保證他們在學生和教職員工表中都是唯一的?

這似乎是隨着時間的推移會變得困難的設計。也許嘗試將中心焦點從「人員」表移到用戶表並從那裏分配角色?事情是這樣的:

User 
------ 
Id 
Password 
UserType 
(where's the username?) 

UserInfo 
------ 
UserID 
Name 
Address 

Role 
------ 
Id 
Name 

UserRole 
------ 
UserID 
RoleID 

(該Role表將至少有兩個記錄,一個叫「學生」和一個叫「教授」,但可以允許更多的角色也一樣)

有這裏有幾個好處:

  1. 您只需要在一個地方存儲名稱和地址,而不是跨不同角色複製模型。
  2. 用戶可以有多個角色。例如,一位教職員可以參加一些班級,並在一段時間內成爲「學生」。一個研究生可以教一些課程,併成爲一名「教員」。
  3. 可以添加新角色而無需更改數據模型。
相關問題