【发布时间】:2012-07-16 19:47:21
【问题描述】:
有时创建一个单独的表会产生更多的工作,我还是应该拆分它吗?
例如:在我的项目中,我有一张客户表,每个客户对每种产品都有自己的特价(只有 5 个产品和更多产品未来没有计划),每个客户也有一周中公司向他交付产品的独特日子。
当天数和产品价格是客户表中的列而不是单独的表时,许多操作(例如更改客户的天数/价格,或显示所有客户的天数和价格)会容易得多,因此是否只能创建在这种情况下有一张大客户表吗?有什么缺点?
更新:他们刚刚告诉我,大约一年后他们有机会添加更多产品,他们说他们的业务无论如何都不会超过 20-30 种产品。 我仍然不明白为什么在这种情况下,当产品的价格没有关系(每个客户都有自己的特价)时,在 Products 表中添加行比在 Customers 表中添加列更好? 我能想到的唯一好处是只有 5 个产品的客户不必“携带”20 个可空产品(节省服务器空间)?我没有太多经验,所以也许我错过了显而易见的事情?
【问题讨论】:
-
“未来不计划更多产品”。永远不要说永远...
-
“当天数和产品价格是客户表中的列而不是单独的表时,许多操作 [...] 会容易得多”。真的吗?写几条
INNER JOIN语句有多难?您想在/如果添加新产品时添加更多列? -
您需要区分对保持数据最新非常有用的规范化表格格式和对报告很重要的非规范化数据版本。听起来您需要一组单独的报告表,这些表可能每天更新,而不是即时更新。
-
@LittleBobbyTables - 我并不是说它是 hard 但它仍然需要更多的工作,尤其是应用程序有很多操作,所以我为什么不应该这样做那样又省了自己的工作?特别是新产品没有计划,如果他们想升级,他们会付给我更多的钱。那几天呢?一周 7 天相当稳定?
-
@GordonLinoff - 即使他需要单独的报告表,格式仍然可能会针对该模式的那部分进行“规范化”。 BornToCode - 如果您曾经进行过维护,这不是更多的工作。研究表明,大约 80% 的开发工作都花在了维护上,而不是用于初始生产。正确规范您的初始数据库,并且仅在性能要求时生成(n 个额外的)非规范化模式。对您的客户保持专业 - 不要采取“简单”的方式。此外,完全非规范化的结构可能难以轻松使用。
标签: sql database database-design