我正在开发一个数据库,该数据库具有每个用户类型派生自的个人表。换句话说,有如下表:
Individual: FirstName, LastName, Email,
等<lots more
>
Employee: IndividualId
Customer: IndividualId
现在,我想添加不是从个人派生的新类型的用户(WeirdPerson)。 (WeirdPerson与其相关的数据明显少于任何个体,我真的不想将个人中的每个字段设置为对于WeirdPerson为null。)
我需要在一个表上使用一个关键字段,该表将包含来自WeirdPersons的条目和来自Individuals的条目。这表明地图表如下:
<lots more
我希望MashedupId成为自动生成的字段。由于我使用的是TSQL,因此身份似乎是一个不错的选择。除了MashedupId分为两个表。我考虑了另一张桌子:
MashedupIndividuals: MashedupId, IndividualId
MashedupWeirdPerson: MashedupId, WeirdPersonId
将MashedupId设置为标识,然后将其设置为MashedupIndividuals和MashedupWeirdPerson中的外键。
这是继续前进的最佳方式吗?你会如何解决这个问题?
编辑:澄清一下,我对WeirdPerson的唯一信息就是电子邮件地址。我考虑从个人中删除电子邮件字段,然后创建一个只有GlobalPersonId和Email的新GlobalPerson表。 GlobalPerson表(或者我使用的任何更好的名称)并不像将WeirdPerson分离为完全不同的类型那样自然。但是......我愿意重新考虑这个立场。
答案 0 :(得分:2)
我建议使用一个表来托管应用程序中所有人共有的数据。然后,您可以为特定类型的人员添加其他表格,并将其链接回公共表格。
tblPerson
tblEmployee
tblCustomer
编辑:
以下是一些更适用于您的问题的定义(对于这些奇怪的人来说也更有趣)。关键是建立奇怪的人和普通人共享的数据,然后建立表/关系以支持该模型。可能有必要将不适用于怪异人物的字段从tblIndividual移动到tblNormalPerson。
tblIndividual
tblWeirdPerson
tblNormalPerson
答案 1 :(得分:1)
您可以使用uniqueidentifier
字段作为您的ID。这保证在多个表中是唯一的。使用NEWID()
函数生成新值。
答案 2 :(得分:0)
您可以拥有一个包含三个字段的表,其中一个字段始终为null:
MashedupId,IndividualId,WeirdPersonId
或ID字段和ID类型(个人/怪异)