将外部ID添加到主键字段

时间:2013-07-10 21:49:04

标签: ms-access database-design primary-key

我正在为大学部门(供内部使用)创建一个数据库,该数据库会跟踪与人有关的问题。我只收到大学员工的信息,我正在使用他们的大学ID跟踪他们。但该数据库也适用于非大学员工甚至有时不在大学以外的人员。我想为这些人分配ID,但是将值存储在与大学ID相同的列中。有什么想法我应该如何解决这个问题?我不知道如何保持univ id和no。我将在同一栏中给予其他人,并以不同的方式对待他们(如果需要的话)。人们通常如何解决这些问题?

PS:我不喜欢自动号码,因为我无法删除ID并将其恢复到数据库中

2 个答案:

答案 0 :(得分:0)

这里最好的选择可能是为所有人创建一个公共Person表,只跟踪一个Id,然后为每个不同类型的人联系不同的表(例如Employee,{ {1}}等等 - 请注意,所有这些名称都只是示例。这些表中的每一个都包含Student表的外键。实际上,这在逻辑上使每个人成为人的不同“子类”。

例如,Person我通过外键与Employee相关

Person

这对任何[Person.PersonId] {PK} <==(1-0)==> {FK:Person.PersonId} Employee.PersonId 实体都是通用的:

Other

请注意,所有类型的人共有的任何列可能直接存在于[Person.PersonId] {PK} <==(1-0)==> {FK:Person.PersonId} Other.PersonId 表中,人员的每个“子类”仅记录特定于其特定类型的列。

此外,您可以创建一个视图,并连接这些表,以便为人们提供“组合”的通用记录。在某些情况下,在视图中包含一个列很有用,它只是指示单个记录来自哪个表(例如Personclass

答案 1 :(得分:0)

我个人不希望在一个字段中混合使用两种不同类型的ID。这只是在您迁移时等待麻烦,因为您需要按惯例或通过其他字段将它们分开。

您当然会使用uni id搜索此人......

(uni id和不在uni上的人的id)

方法1 - 引入附加表

Issue
- id
- person_id 

Person
- id
- university_person_id (optional)

University Person (table)
- id

方法2 - 使大学引用可选

Issue
- person_id 

Person
- id
- university_ref (optional)

您怎么看?

但是如果你真的想在一个字段中混合使用两种id,我建议使用前缀后跟生成的数字。

EXTERNAL-123456

您还可以引入一个额外的字段external_contact(boolean)或contact_type'Uni'或'External'。还要在两个组合上添加唯一索引。

希望这会给你一些思考的东西:)