【问题标题】:Non-Repeating Database Design非重复数据库设计
【发布时间】:2013-01-29 23:07:19
【问题描述】:

如果我需要保留会员购买历史记录,但又想尽可能保持我的数据库高效(第 3 范式),我将如何避免重复数据?这是我想出的:

粗体 = 主键

会员(memberID、名字、姓氏、地址、城市、州、邮编)

历史(historyID、购买、日期、金额)

MemberHistory(memberID, historyID)

这个问题是我的历史表本身没有任何意义,而连接的表似乎会有一堆重复。任何人 1) 看到此设计的问题,并且 2) 可以告诉我更好的方法来保存成员历史吗?

【问题讨论】:

  • MemberHistory.memberID 可能应该直接放在您的 History 表中,因为 History 中的一行只有一个且只有一个 memberID。

标签: database-design relational-database database-schema


【解决方案1】:

像这样摆脱MemberHistory

Member(memberID(PK), firstName, lastName, address, city, state, zip)

History(historyID(PK), memberID(PK/FK), purchase, date, amount)

没有多对多的关系,所以你不需要MemberHistory

【讨论】:

  • 如果我有 100 或 10,000 个客户 - 这不会变得低效吗?
  • 我会用一个问题来回答你的问题:你还会如何存储它?如果您有 10,000 个客户,每个客户有 10 个订单,您必须以某种方式保存该信息;这看起来是 RDBMS 中的最佳方式。这就是我会做的。