主键作为域用户名和用户ID?

时间:2014-11-11 03:45:48

标签: sql primary-key-design sql-types

我在这里读到,使用AI整数表示用户而不是指定的域(字符串)用户名可能更好。但是,当我在'users'表中包含自动生成的userid和唯一的域用户名时,我可以接受这一点,我应该如何在其他表中将其表示为FK?例如。带有'userid'和'domainname'的部门表或只是用户ID;带有'userid'和'domainname'的硬件表,或者只是'userid'作为所有者?

2 个答案:

答案 0 :(得分:0)

我会给你一些想法,但不是确切的答案。 - "这个答案基于我对你的问题的理解"

设计示例:

Users

您的主键是UserId,您可以将其用作其他表中的外键。

UserId | Usernames 

Department

您的主键是DepartmentId,您可以将其用作其他表中的外键。

您还有一个名为UserId的外键来自表Users

DepartmentId | UserId |DomainName

Hardware

您的主要密钥是HardwareId

您还有2个外键,名为DepartmentIdUserId

HardwareId | DepartmentId | UserId (optional) | Etc...

好的,每个表都必须拥有自己的主键,并且您无法使用DepartmentIdUserId成为表Hardware中的主键,因为它们是这个表中的外键。

DepartmentId - 包含,这样您就会知道硬件基础所在的部门。

UserId - (可选),您只需使用UserId

即可了解此硬件的所有者或用户

答案 1 :(得分:0)

只是用户ID。这是database normalization的关键组成部分;如果其他表包含可由用户完全确定的任何其他信息,则会引入不一致的风险,从而不同的记录对给定用户做出不同的声明。