在一个数据库原型的,我有一个集中的领域(如姓名、描述的状况),都需要在多、功能上的不同表。

这些领域始终具有同样的最终用户功能的标记,显示,搜索、过滤等。他们不是外国主要制约因素。应该如何这样可以仿照?

我可以认为以下类型:

  • 每个表格得到所有这些属性。在这种情况下,如何将你的名字?同样,在每个表格,或者与一个表名前缀(如usrName,prodName)

  • 将它们移到一个表性,增加一个外国的关键的"核心"的表格,引用的属性。PK

  • 如上所述,但不是一个外国的关键,使用的属性。PK为PK在各自的核心表。

有帮助吗?

解决方案

这听起来像你可能会把这个想法的正规化有点太远。记住,它的想法,你在减少冗余在你 数据.你的例子似乎表明你在担心"冗余"的元信息的数据库的设计。

最后,虽然, 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

在短期、标准化数据,而不是你的数据库的设计。

其他提示

除非你使用相同的名称或说明 跨表格,你不应该恢复正常,数据。状况类型倾向于重复使用,因此,规范的那些。例如:

order_status_types
- id
- name
- description

shipping_accounts
- id
- name
- description

orders
- order_status_type_id
- shipping_account_id

preferences
- shipping_account_id

正常化往往是最好的做法在任何关系数据库(在合理的范围内).

如果你有的领域,如国家(意指国家内的一个国家),然后参照表,如"国家"(id,short_name,long_name等等)可能的方式去,然后每一个记录,引用一个状态只需要一个state_id列其中,因为你没有说,是一个参考记录在的状态表。

然而,在某些情况下正常化的所有数据不一定需要,因为它只是使事情变得复杂,但是这应该是显而易见的在哪里做和不做到这一点。

希望这会有所帮助。

我会给每个表自己的组列,即使他们有相同的名称并在逻辑上是相似的。

如果你需要更改其中的一个表,由增加或删除某些列,或改变它们的数据类型,然后你可以做到这一点,只有在表,其中涉及,而不是搞清楚如何以复杂的共同属性表。

给每个表格的控制它自己的属性促进 凝聚力, ,这是一件好事。它还避免了你的问题是关于向哪个方向的外国键去。

至于列名,这是不必要或最好把前缀上的列名。如果你做过一个加入,结果在列同名来自两个表,使用别名以区分他们。

我总是给每个表格的3字母代码然后我的使用在所有领域的名称。这样,在产品中的表格我有prdname,prddescription,prdstatus,并在供应商文件,我有venname,vendescription,venstatus.当事情变得加入,也没有必要担心的同样命名的领域。

当然,表中都有一个域名普通老 id 和产品的表格将有一场名为venid,指id场在供应商表格。在这种情况下我不把珠江三角洲的前缀就因为venid非常有意义和nonambiguous.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top