【问题标题】:database normalization a one to one relationship [closed]数据库规范化一对一关系[关闭]
【发布时间】:2016-07-12 17:42:52
【问题描述】:

我的数据库中有两个表:

营销人员:

Id, Username, Password, Email

商店:

Marketer Id, 1 Store, 2 Store, 3 Store, 4 Store, ...., 10 store 

Stores 表中有每个营销人员的 10 家商店的名称。 所以这两个表之间是一对一的关系。对? 我想知道将这两个表结合起来是否更好。 我不想为第二个表(存储表)发送大量查询。所以我认为如果我将这两者分开会更好,因为我很少需要存储在“营销人员表”中的信息。

【问题讨论】:

  • 我不清楚 Stores 是不是有 10 个商店字段的行?还是每个都是单独的行?
  • 每一行都有一个营销商 ID,它是一个外键。以及十个不同列中十个商店的名称。
  • 似乎异常。我想你会有一个营销人员表。一个 store 表和一个 StoreMarketer 表,其中 storeNo 查找的值为 1-10,具有唯一索引 Marketers 和 StoreNo Lookup。唯一索引和查找确保没有标记可以拥有超过 10 个商店。您甚至可以向商店添加唯一索引,以确保单个商店只有 1 个营销人员。您当前的方法允许为不同的标记重复存储并重复相同的存储。如果您向每个营销人员添加更多商店,也不允许增长。
  • 是的,参见规范化。枚举列(比如“2”以上)从来都不是一个好主意

标签: mysql


【解决方案1】:

从良好的设计角度来看,您应该将这些表分开。 满足您当前的要求,

  1. 如果您不经常需要来自营销人员的数据,为什么需要将这些数据包含在品牌旗舰店中。您最终只会获取额外的数据。

  2. 如果明天某些新信息和映射更改为一对多或反之亦然,那么您当前的设计将完美无缺。

  3. 当然,从未来维护的角度来看,更新当前设计更容易。

虽然,我也建议您向 Stores 表添加一个独立的主节点。

【讨论】:

  • 为什么要向 Stores 表添加一个独立的主节点?我不明白。我每一行都有 10 个不同商店的 10 个名称。并且每一行都属于一个营销人员,因此“MarketerID”列使每一行成为唯一的行。
  • 这个schema怎么样。
  • 请看架构并说出你的想法?
  • 这听起来很完美。我假设它是 MarketersStores 表中的商店 ID。这种结构将使您对任何未来的升级和 NO-SQL 数据库都有好处
猜你喜欢
  • 1970-01-01
  • 2016-03-21
  • 2013-09-01
  • 1970-01-01
  • 2016-11-18
  • 2018-02-07
  • 2013-01-29
  • 2015-06-18
  • 1970-01-01
相关资源
最近更新 更多