Database design 在规范化设计中处理主要通信记录的最佳方法

Database design 在规范化设计中处理主要通信记录的最佳方法,database-design,normalization,Database Design,Normalization,我在发布这个问题之前做了搜索,没有找到任何直接相关的内容,所以如果这是重复的,我很抱歉。我正在设计一个业务系统,与任何业务系统一样,我有一个带有CustomerID PK Identity列的Customers表 我正在处理电话号码/电子邮件地址表,我希望以这样一种方式对其进行规范化,即任何给定的CustomerID在我产生这种想法时都可以有多个电话号码和/或电子邮件地址。大多数企业会将一个电话号码与任何一个人的帐户关联,并将其称为主要电话号码。此电话号码可能会显示在任何报表、报告等上,与电子邮

我在发布这个问题之前做了搜索,没有找到任何直接相关的内容,所以如果这是重复的,我很抱歉。我正在设计一个业务系统,与任何业务系统一样,我有一个带有CustomerID PK Identity列的Customers表

我正在处理电话号码/电子邮件地址表,我希望以这样一种方式对其进行规范化,即任何给定的CustomerID在我产生这种想法时都可以有多个电话号码和/或电子邮件地址。大多数企业会将一个电话号码与任何一个人的帐户关联,并将其称为主要电话号码。此电话号码可能会显示在任何报表、报告等上,与电子邮件地址相同

我开始思考,如果我想获得一个客户列表,其中包含他们的主要电话和电子邮件地址,SELECT查询将如何工作。显然,我可以使用内部连接来检索信息,但我只希望每个CustomerID显示一次,如果CustomerID有两个电话号码,那么它们将在列表中显示两次

因此,我最初的想法是创建一个名为CustomerCommunications的表,存储电话号码和电子邮件地址,并在其中添加一个FlagPrimary列,但这没有多大意义,因为如何判断一条记录是电话号码还是电子邮件地址。(显然内容会泄露,但从查询的角度来看,这将是一个挑战)。因此,我考虑添加一个CommunicationTypes表,其中主电话和主电子邮件的行是分开的。然后在CustomerCommunications表中,我将添加一个名为CommunicationTypeID的外键,这将允许我轻松地识别哪个是主电话,哪个是主电子邮件。但后来我开始思考另一个电话和电子邮件地址记录的通信类型是什么。只是电话和电子邮件?辅助电话和电子邮件


显然,这个问题是主观的,取决于一个人自己的设计思想,但基本上我要寻找的是其他人在使用1对多表时使用的想法,但希望能够轻松地挑出一行用于显示或报告目的。

首先,您可能需要考虑将电子邮件地址和电话号码保存在单独的表中。根据您的观点,它们具有不同的属性和用途。如果将它们放在一个表中,那么应该有一个分区属性来区分信息是电话号码还是电子邮件地址。如果使用代码作为分区属性,那么如果需要,您可以选择稍后添加其他通信类型


如果您的业务规则是,只有一个电话号码和一个地址可以是主要的,并且它们可以包含任意多的其他电话号码和地址,那么使用数据库模式强制执行此操作的方法是将外键放在客户表上,指向主要联系人。这意味着您的电话号码表中有一个FK to CUSTOMER,而CUSTOMER也有一个FK to PHONE_号码(例如主电话号码\u id)。电子邮件也是如此。如果您将电子邮件和电话号码混合在同一个表中,您仍然需要一个触发器或其他一些程序逻辑来确保您为每个客户指向一个电话号码和一封电子邮件。这是将不同的联系人类型划分为各自的表的另一个优点。FKs可以完成所有繁重的工作,并且您没有任何潜在的易出错程序代码。

首先,您可能需要考虑将电子邮件地址和电话号码保存在单独的表中。根据您的观点,它们具有不同的属性和用途。如果将它们放在一个表中,那么应该有一个分区属性来区分信息是电话号码还是电子邮件地址。如果使用代码作为分区属性,那么如果需要,您可以选择稍后添加其他通信类型


如果您的业务规则是,只有一个电话号码和一个地址可以是主要的,并且它们可以包含任意多的其他电话号码和地址,那么使用数据库模式强制执行此操作的方法是将外键放在客户表上,指向主要联系人。这意味着您的电话号码表中有一个FK to CUSTOMER,而CUSTOMER也有一个FK to PHONE_号码(例如主电话号码\u id)。电子邮件也是如此。如果您将电子邮件和电话号码混合在同一个表中,您仍然需要一个触发器或其他一些程序逻辑来确保您为每个客户指向一个电话号码和一封电子邮件。这是将不同的联系人类型划分为各自的表的另一个优点。FKs可以完成所有繁重的工作,并且您没有任何潜在的容易出错的过程代码。

Primary作为标志也可以。为什么一个人不能有多个电子邮件地址?我知道。我会设置它,以便他们可以输入多个电子邮件地址,但大多数情况下,当你注册任何类型的网站时,你通常会输入一个电子邮件地址,这就是他们联系你的方式。主标志可以。为什么一个人不能有多个电子邮件地址?是的。我会设置它,以便他们可以输入多个电子邮件地址,但大多数情况下,当您注册任何类型的网站时,您通常会输入一个电子邮件地址,这就是他们联系您的方式。因此,与其向CustomerPhones表中添加FlagPrimary列,不如向Customers表中添加一个名为PrimaryPhoneID的列哪一个是客户电话PK的FK?电子邮件也是如此吗?我确实同意,在真正的设计中,电子邮件和电话号码是独立的实体,它们有自己的属性。我在考虑通过在通信实体上进行简化。简化取决于