【发布时间】:2016-06-22 20:47:33
【问题描述】:
这是一个相当简单的 Nerf 枪支玩具与其所属价格范围的多对多映射。 Zombie Strike 和 Elite Retaliator 价格昂贵,而 Jolt Blaster 和 Elite Triad 更便宜(在 5.00 美元到 9.99 美元之间)。
到目前为止一切顺利。但是,当我想开始跟踪其他商品的价格时会发生什么?这些其他项目具有不同的列,但仍需要 PRICE_RANGES 映射。所以我可能仍然可以使用 PRICE_RANGES 表,但我需要其他表来存储其他项目。
让我们添加棋盘游戏。我应该如何为这个新表建模,以及其他喜欢它的人?
我是否应该添加多个多对多表,为我正在跟踪的每种新类型的项目添加一个表?
或者我应该对 PRICE_RANGES 进行非规范化,完全摆脱映射表,只为每个项目类型复制 PRICE_RANGES 表?
第二种解决方案的优点是非常相似,但代价是复制了 PRICE_RANGES 中的所有范围。 (并且可能有数千个 PRICE_RANGES,具体取决于增量有多小)。这种非规范化仍然是一个有效的解决方案吗?
或者也许有第三种方式被认为比这两种方式更好?
感谢您的帮助!
【问题讨论】:
-
我的第一个建议与@ben-sala 的答案相同,您有一个通用的 Product 表,然后是 ProductType 列。鉴于您不希望此解决方案,我将不得不采用第一个解决方案。我唯一会使用第二种解决方案的情况是,每种产品的价格范围是否不同。无论如何,标准化通常是要走的路。
标签: sql database database-design many-to-many database-schema