0

我想设计一个名为 Fruit 的表,其中存储一种水果的名称、价格和来源。样本数据:

(Apple, 100c, SuperMarket1)
(Orange, 101c, SuperMarket1)
(Apple, 99c, SuperMarket2)
(Orange, 103c, SuperMarket2)

我将 SuperMarket1 的 Orange 价格指定为官方价格,SuperMarket2 的 Apple 价格指定为官方价格。

目前,Source 不是表的主键,因此,所有非官方条目都不会显示。如果我想存储非官方价格,我需要将 Source 变成主键的一部分。要将条目指定为官方,然后我需要使用 Source=Official 输入额外的条目,或者创建一个指定为官方的列?

我的目标是:

  1. 能够存储所有可用的价格,而不是必须在一张表中。
  2. 官方条目的来源应该很容易识别。
  3. 能够以最少的联接数查询官方。
  4. 一种水果的官方价格不能超过一个。
  5. 水果的集合并不小(水果只是一个例子)并且不断发展。维护一个额外的表来存储每种类型的官方 Source 可能是一个巨大的负担。

对干净的设计有什么想法吗?

4

1 回答 1

1

看起来你需要类似的东西:

在此处输入图像描述

注意:FRUIT.STORE_ID 在上述模型中可以为 NULL,以打破 FK 循环并允许在运行时实际插入新数据。如果您的 DBMS 支持延迟约束,则可以将此字段设为 NOT 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 中由一行表示,并且 FRUIT.STORE_ID 每行不能存储多个值。

5)水果的集合并不小(水果只是一个例子)并且不断发展。维护一个额外的表来存储每种类型的官方 Source 可能是一个巨大的负担。

幸运的是,数据库非常擅长维护大量数据。

于 2012-06-29T22:46:22.793 回答