产品“特价”的DB表示,其中特殊字段因字段而异

时间:2011-03-26 23:45:47

标签: database normalization database-normalization

我正在尝试找出在我的数据库中表示“特价”概念的最佳方式 - 这些与“待售产品”有关。每个特价都会提供一些折扣,但是它们会有所不同,因为一个只是简单的降价,但其他的将是“买x获得半价”或“类别x 30%”等。我预计不会有超过10种特殊类型......但需求会发生变化,我需要确保在需要时能够处理更多。

我试图用一种简单的方法在我的数据库中表示这些,但是我看到它的方式我要么必须创建一个特殊的表,要么我必须有一个带有加载的特殊表列的90%的值将为NULL。我打算有一个SpecialType表,它将按类型将所有特价组合在一起,例如“折扣”,“购买x获得免费”,这将用于确定相应应用层中的业务逻辑。另外我想我可以沿着每个特殊类型有一个表的路径,然后缓存结果(基本上缓存每个产品的可渲染输出),可以定期更新,比如说每5分钟,这意味着要执行大量的连接(编辑 - 这些实际上可能是UNIONS)但是很少这样做,因为数据不是实时关键的,因为5分钟的延迟不会杀死任何人。

如果能够保持我的数据库规范化,我会感谢任何有关如何以最整洁的方式处理这种情况的反馈。

1 个答案:

答案 0 :(得分:0)

由于添加特殊类型需要更改代码,并且您无法合理地预期所有可能的特殊类型,我会很乐意为每种特殊类型创建一个单独的表,以及某种主表,将包含特殊类型,名称,描述等...

使用包含大量不适用字段的单个表格往往会成为Inner Platform,这几乎总是有点过分。

BTW,我生命中最令人不快的惊喜之一,就是当我发现一个新的促销活动需要从电视广告中改变代码/数据库时。