2011-06-06 34 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. 可以添加新角色而无需更改数据模型。