当前位置:  开发笔记 > 编程语言 > 正文

大多数表中的字段相同

如何解决《大多数表中的字段相同》经验,为你挑选了1个好方法。

在数据库原型中,我有一组字段(如名称,描述,状态),这些字段在多个功能不同的表中是必需的.

这些字段始终具有相同的最终用户功能,用于标记,显示,搜索,过滤等.它们不是外键约束的一部分.该如何建模?

我可以想到以下变种:

每个表都获得所有这些属性.在这种情况下,你会如何命名他们?相同,在每个表中,或与表名前缀(如usrName,prodName)

将它们移动到表属性中,将外键添加到"核心"表,引用Attributes.PK

如上所述,但不是外键,而是在各自的核心表中使用Attributes.PK作为PK.

Owen.. 8

听起来你可能会把规范化的想法推得太过分了.记住,这是你减少数据冗余的想法.您的示例似乎表明您担心数据库设计的元信息中的"冗余".

最终虽然,user.nameuser.description是从功能的不同product.nameproduct.description,并且应被视为这样.因为status,这取决于你的意思.是status不仅仅是一个产品/用户的记录的指标是主动或不?如果是这样,那么将它分成不同的表是有意义的.

使用您提供的信息,如果"活动/过期/删除"仅仅是数据库中状态的指示,那么我肯定会同意这样的表结构:

users            products         status
  id               id               id
  name             name             name
  description      description
  status_id        status_id

然而,如果status可以想象地改变以表示语义上不同的东西(即,对于用户,可能是"活跃/退休/解雇"),我建议将其拆分为未来的设计证据:

user_status     product_status
  id              id
  name            name

简而言之,规范化您的数据,而不是数据库设计.



1> Owen..:

听起来你可能会把规范化的想法推得太过分了.记住,这是你减少数据冗余的想法.您的示例似乎表明您担心数据库设计的元信息中的"冗余".

最终虽然,user.nameuser.description是从功能的不同product.nameproduct.description,并且应被视为这样.因为status,这取决于你的意思.是status不仅仅是一个产品/用户的记录的指标是主动或不?如果是这样,那么将它分成不同的表是有意义的.

使用您提供的信息,如果"活动/过期/删除"仅仅是数据库中状态的指示,那么我肯定会同意这样的表结构:

users            products         status
  id               id               id
  name             name             name
  description      description
  status_id        status_id

然而,如果status可以想象地改变以表示语义上不同的东西(即,对于用户,可能是"活跃/退休/解雇"),我建议将其拆分为未来的设计证据:

user_status     product_status
  id              id
  name            name

简而言之,规范化您的数据,而不是数据库设计.

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有