我们设计这个数据库来跟踪我们的客户数据库,但我觉得它的设计有点复杂我觉得它可以更简单有人可以提供一些设计建议吗?
user474901
问问题
3458 次
3 回答
0
关于这张图的一些想法:
- 在多对多连接表上设置主键(大概两列都应该是 PK)
- 我不认为表格中的“重复”电话号码违反了规范化规则,相反,我认为这是巧合。例如,您不会仅仅因为两个人被命名为“Joe”而有一个完整的名字表。另外,想象一下如果两个人共享一个电话号码,那么其中一个人会得到一个不同的号码。如果直接
phone
引用,更新一个数字是一项简单的操作Customer
,但奇怪的是(对我来说)插入一个新的phone
并在连接表上进行多个操作只是为了做同样的事情。 - 同样处理
Email
。 - 如果有多种选择,应用程序将如何选择要使用的电话或电子邮件?是否应该提供
default
位或ordinal
列? - 客户是否有许多地点、许多公司,或两者兼而有之?
于 2012-10-03T15:34:47.673 回答
0
如果简单是这里的关键点,我建议您将与客户相关的地址类型信息折叠到一个表中,如下所示:
customer_contact_details{
customer_id MEDIUM_INT
contact_type VARCHAR2(10)
contact_details VARCHAR2(100)
status BOOLEAN
}
然后可以Home Phone,email,primary_email,work_phone,primary contact
根据您的需要将contact_type 字段标记为。然后,您可以将所有此类相关的联系信息放在一个表中。简化您的架构,您只需要一个连接即可理解信息。
于 2012-10-04T09:02:26.260 回答
0
另一个部分解决方案是使用联系人表:客户有联系人(一对多);每个联系人可能有多个电话号码(即使那样,您也只需要一个手机号码、一个家庭号码、一个工作号码和一个传真号码)但只有一个电子邮件地址。
于 2012-10-04T09:29:51.347 回答