0

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

PS:我不喜欢自动编号,因为我无法删除 ID 并将其返回数据库

4

2 回答 2

0

我个人不想在一个字段中混合两种不同类型的 id。这只是在等待迁移时出现问题,因为您需要按照惯例或通过其他字段将它们分开。

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

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

方法 1 - 引入一个附加表

Issue
- id
- person_id 

Person
- id
- university_person_id (optional)

University Person (table)
- id

方法 2 - 将大学 ref id 设为可选

Issue
- person_id 

Person
- id
- university_ref (optional)

你怎么看?

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

EXTERNAL-123456

您还可以引入附加字段 external_contact(布尔值)或 contact_type 'Uni' 或 'External'。还要在两者组合上添加唯一索引。

希望这会给你一些思考的食物:)

于 2013-07-10T22:23:55.110 回答
0

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

例如,EmployeePerson通过外键关联

[Person.PersonId] {PK}  <==(1-0)==>  {FK:Person.PersonId} Employee.PersonId

Other这对于任何实体都是通用的:

[Person.PersonId] {PK}  <==(1-0)==>  {FK:Person.PersonId} Other.PersonId

请注意,所有类型的人员共有的任何列都可以直接存在于Person表中,人员的每个“子类”仅记录特定于其特定类型的列。

此外,您可以创建一个视图,将这些表连接起来,为人们呈现一个“组合”的通用记录。在某些情况下,在视图中包含一个简单地指示单个记录来自哪个表的列(例如,classtype.

于 2013-07-10T22:14:51.633 回答