db表上的1对1关系有异味吗?

我有一个有很多字段的表。这些字段可以分为逻辑组 - 就像作业的项目经理信息一样。分组本身并不是真正的实体候选人,因为他们没有,也不应该拥有自己的PK。 现在,为了对它们进行分组,这些字段有前缀(例如PmFirstName),但我正在考虑将它们分解为主表上具有1:1关系的多个表。 当我这样做时,有什么我应该注意的吗?这只是一个糟糕的选择吗? 我可以看到,对于所有额外的连接,我的查询可能会变得更复杂,但是可以通过视图来减轻这些问题吗?如果我们谈论的记录少于10万的表格会对性能产生明显影响吗? 编辑:我将进一步证明非实体候选人的想法。此信息由我们的用户群输入。他们不了解/彼此关心。因此,同一用户可能会提交相同的“projectManager名称”或者此时不会违反任何约束的任何内容。如果我们想要关联来自不同用户的条目,我们可以在以后确定管道。如果我将这些东西给予他们自己的密钥,他们将以与主表相同的速度增长 - 因为它们基本上是同一实体的一部分。没有用户是从可用的“项目经理”列表中挑选的。 因此,鉴于上述情况,我不认为它们是实体。但也许不是 - 如果你有进一步的想法,请发布。     
已邀请:
我通常不会使用1比1的关系,除非有特定的性能原因。例如,在不同的表中存储不常用的大文本或BLOB类型字段。 我怀疑这里还有其他事情发生。在您提供的示例中 - PmFirstName - 似乎应该有一个与“ProjectManagers”或“Employees”表相关的pm_id。你确定这些分组都不是真正的实体候选人吗?     
对我来说,除非对于某些行或查询您不会对额外的列感兴趣,否则它们会闻到异味。例如如果对于大部分查询,您没有选择PmFirstName列,或者对于大部分行,这些列是NULL。 我喜欢气味标签。     
我使用1对1关系来继承类似的构造。 例如,所有债券都有一些基本信息,如CUSIP,Coupon,DatedDate和MaturityDate。这一切都在主表中。 现在,每种类型的债券(Treasury,Corporate,Muni,Agency等)也都有自己独特的一组列。 在过去,我们只有一个非常宽的表格,包含所有这些信息。现在我们将特定于类型的信息分解为单独的表,这样可以提供更好的性能。   现在,为了对它们进行分组,这些字段有前缀(例如PmFirstName),但我正在考虑将它们分解为主表上具有1:1关系的多个表。 创建一个人员表,每个数据库都需要这个。然后在项目表中有一个名为PMKey的列,它指向person表。     
为什么你觉得这组领域不是实体候选人?如果它们不是那么为什么尝试用前缀来识别它们? 删除前缀或将它们提取到自己的表中。     
如果它们是可以在别处使用的独立逻辑实体,则将它们分成单独的表是有价值的。 所以当前所有项目的“项目经理”可能是1:1,但是后来您可能希望能够让项目经理拥有多个项目是有意义的。 所以有额外的表是好的。 如果您有PrimaryFirstName,PrimaryLastName,PrimaryPhone,SecondaryFirstName,SecondaryLastName,SEcondaryPhone 你可以拥有一个带有FirstName,LastName,Phone的“Person”表 然后您的原始表只需要“PrimaryId”和“SecondaryId”列来替换您之前拥有的6列。 此外,使用SQL可以跨物理位置拆分文件组和表。 因此,您可以拥有一个POST表和一个COMMENT表,它们具有1:1的关系,但COMMENT表位于不同的文件组上,并且位于具有更多内存的不同物理驱动器上。 1:1并不总是闻到。除非没有目的。     

要回复问题请先登录注册