Sql server 共享一个;“身份”;隔着桌子
我正在处理一个数据库,它有一个每个用户类型都派生自的现有个人表。换句话说,有如下表格:Sql server 共享一个;“身份”;隔着桌子,sql-server,database-design,Sql Server,Database Design,我正在处理一个数据库,它有一个每个用户类型都派生自的现有个人表。换句话说,有如下表格: 个人:名字、姓氏、电子邮件, 员工:个人ID 客户:个人ID 等等 现在,我想添加一个新类型的用户(古怪的人),它不是从单个用户派生的。(WeirdPerson与它相关的数据比任何个人都少得多,我真的不想为一个WeirdPerson将Individual中的每个字段都设置为null。) 我需要在一个表上使用一个键字段,该表将包含来自怪人的条目和来自个人的条目。这建议像这样映射表: MashedupIndivi
个人:名字、姓氏、电子邮件,
员工:个人ID
客户:个人ID
等等
现在,我想添加一个新类型的用户(古怪的人),它不是从单个用户派生的。(WeirdPerson与它相关的数据比任何个人都少得多,我真的不想为一个WeirdPerson将Individual中的每个字段都设置为null。)
我需要在一个表上使用一个键字段,该表将包含来自怪人的条目和来自个人的条目。这建议像这样映射表:
MashedupIndividuals:MashedupId,IndividualId
MashedupWeirdPerson:MashedupId,怪人
我希望MashedupId是一个自动生成的字段。因为我使用的是TSQL,所以标识似乎是一个不错的选择。除了MashedupId被分成两个表之外。我又考虑了另一张桌子:
MashedupId:MashedupId
将MashedupId设置为标识,然后在MashedupIndividuals和MashedupWeirdPerson中将其设置为外键
这是前进的最佳方式吗?你将如何解决这个问题
编辑:澄清一下,对于一个古怪的人,我只有一个电子邮件地址。我考虑将email字段从personal中删除,然后用GlobalPersonId和email创建一个新的GlobalPerson表。GlobalPerson表(或我使用的更好的名称)不像将怪人分离为完全不同的类型那样自然。然而。。。我愿意重新考虑这个位置。您可以有一个包含三个字段的表,其中一个字段始终为空:
马塞杜皮德,个体,怪人
或者使用ID字段和ID类型(单个/怪异)您可以拥有一个包含三个字段的表,其中一个字段始终为空:
马塞杜皮德,个体,怪人
或者使用ID字段和ID类型(单个/怪异)您可以为您的ID使用uniqueidentifier
字段。这保证在多个表中是唯一的。使用该函数生成新值。您可以为id使用一个uniqueidentifier
字段。这保证在多个表中是唯一的。使用该函数生成新值。我建议使用一个表来承载应用程序中所有人共有的数据。然后,您可以为特定类型的人创建其他表,并将它们链接回您的公共表
特伯森
- 人格(pk)
- 姓名、地址、生日等
受雇人
- 雇员ID(pk)
- PersonID(fk至tblPerson)
- 职位、电话、电子邮件等
TBL客户
- 客户ID(主键)
- PersonID(fk至tblPerson)
- 其他领域
编辑:
这里有一些更适用于你的问题的定义(和这些奇怪的人在一起也更有趣)。关键是建立古怪人和普通人共享的数据,然后建立支持该模型的表/关系。可能有必要将不适用于怪人的字段从tblIndividual移到tblNormalPerson
双盲
- 个体ID(pk)
- 适用于怪异/正常人的其他数据字段
tblWeirdPerson
- 怪人(pk)
- 个人ID(fk到TBL)
- NumberOfHeads(适用于古怪的人)
tblNormalPerson
- 正常人格(pk)
- 个人ID(fk到TBL)
- 名字(其他适用于普通人的字段)
- 姓氏
- 等等
我建议使用一个表来承载应用程序中所有人共有的数据。然后,您可以为特定类型的人创建其他表,并将它们链接回您的公共表
特伯森
- 人格(pk)
- 姓名、地址、生日等
受雇人
- 雇员ID(pk)
- PersonID(fk至tblPerson)
- 职位、电话、电子邮件等
TBL客户
- 客户ID(主键)
- PersonID(fk至tblPerson)
- 其他领域
编辑:
这里有一些更适用于你的问题的定义(和这些奇怪的人在一起也更有趣)。关键是建立古怪人和普通人共享的数据,然后建立支持该模型的表/关系。可能有必要将不适用于怪人的字段从tblIndividual移到tblNormalPerson
双盲
- 个体ID(pk)
- 适用于怪异/正常人的其他数据字段
tblWeirdPerson
- 怪人(pk)
- 个人ID(fk到TBL)
- NumberOfHeads(适用于古怪的人)
tblNormalPerson
- 正常人格(pk)
- 个人ID(fk到TBL)
- 名字(其他适用于普通人的字段)
- 姓氏
- 等等
是的,我也考虑过。但总的来说,我不喜欢这样的解决方案。查询一个人是什么类型的人比较困难,而且每一行中的NULL都会让我恼火。你可以有一个“高于”个人(共享)的表格,其中只包含一个sharedID和电子邮件(将电子邮件字段移出个人)。然后你的mashup表就有mashedupID和sharedID。是的,我也考虑过。但总的来说,我不喜欢这样的解决方案。查询一个人是什么类型的人比较困难,而且每一行中的NULL都会让我恼火。你可以有一个“高于”个人(共享)的表格,其中只包含一个sharedID和电子邮件(将电子邮件字段移出个人)。然后你的mashup表就有了mashedupID和sharedID。实际上,数据库已经有了