数据库规范化一对一关系[关闭]

Posted

技术标签:

【中文标题】数据库规范化一对一关系[关闭]【英文标题】: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 个营销人员。您当前的方法允许为不同的标记重复存储并重复相同的存储。如果您向每个营销人员添加更多商店,也不允许增长。 Is there ever a time where using a database 1:1 relationship makes sense?的可能重复 是的,参见规范化。枚举列(比如“2”以上)从来都不是一个好主意 【参考方案1】:

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

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

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

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

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

【讨论】:

为什么要向 Stores 表添加一个独立的主节点?我不明白。我每一行都有 10 个不同商店的 10 个名称。并且每一行都属于一个营销人员,因此“MarketerID”列使每一行成为唯一的行。 这个schema怎么样。 请看架构并说出你的想法? 这听起来很完美。我假设它是 MarketersStores 表中的商店 ID。这种结构将使您对任何未来的升级和 NO-SQL 数据库都有好处

以上是关于数据库规范化一对一关系[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

通过一对一关系绑定时文档关闭时崩溃

如何通过学说实体之间的 ID 建立一对一的关系

SQL Alchemy - 从一个实体上的多个一对一关系中删除孤儿[关闭]

您如何使一对一或其他关系正常化?

实体框架中的可选一对多关系[关闭]

具有一对多关系的维度属性[关闭]