我正在为大学部门(供内部使用)创建一个数据库,该数据库会跟踪与人有关的问题。我只收到大学员工的信息,我正在使用他们的大学ID跟踪他们。但该数据库也适用于非大学员工甚至有时不在大学以外的人员。我想为这些人分配ID,但是将值存储在与大学ID相同的列中。有什么想法我应该如何解决这个问题?我不知道如何保持univ id和no。我将在同一栏中给予其他人,并以不同的方式对待他们(如果需要的话)。人们通常如何解决这些问题?
PS:我不喜欢自动号码,因为我无法删除ID并将其恢复到数据库中
答案 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
表中,人员的每个“子类”仅记录特定于其特定类型的列。
此外,您可以创建一个视图,并连接这些表,以便为人们提供“组合”的通用记录。在某些情况下,在视图中包含一个列很有用,它只是指示单个记录来自哪个表(例如Person
或class
。
答案 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'。还要在两个组合上添加唯一索引。
希望这会给你一些思考的东西:)