我想设计一个名为“水果”的表,它存储一种水果的名称、价格和来源。样本数据:
(Apple, 100c, SuperMarket1)
(Orange, 101c, SuperMarket1)
(Apple, 99c, SuperMarket2)
(Orange, 103c, SuperMarket2)我指定来自SuperMarket1的橙色价格为官方,SuperMarket2的苹果价格为官方。
当前,Source不是表的主键,因此,所有非官方条目都不会出现。如果我想存储非官方价格,我需要将源代码转换为主键的一部分。为了指定一个条目为正式条目,我需要使用Source=Official输入额外的条目,或者创建一个指定为官方的列?
我的目标是:
对干净的设计有什么想法吗?
发布于 2012-06-29 22:46:22
看起来您需要类似于:

注意:在上面的模型中,FRUIT.STORE_ID是空的,可以打破FK循环,允许在运行时实际插入新数据。如果DBMS支持延迟约束,则可以将该字段设置为NULL (除非您实际上希望允许水果没有正式价格)。
1)有能力将所有可用的价格储存在一张表中,而不是必要的。
在这个模型中,价格不是每个水果,而是每个商店的。
2)官方条目的来源应易于识别。
这就是FRUIT.STORE_ID的目的。
3)查询最少联接数的官员的能力。
SELECT * FROM FRUIT JOIN PRICE
ON FRUIT.FRUIT_ID = PRICE.FRUIT_ID AND FRUIT.STORE_ID = PRICE.STORE_ID( 4)一种水果不可能有一个以上的官方价格。
每个水果由水果中的一行表示,FRUIT.STORE_ID每一行不能存储多个值。
5)果实集合不小(水果只是一个例子)和进化。维护一张额外的表格来存储每种类型的官方源可能是一种巨大的负担。
幸运的是,数据库非常善于维护大量的数据。
https://stackoverflow.com/questions/11269254
复制相似问题