Database design 存储从多个来源收集的数据,并将一组数据指定为正式数据

Database design 存储从多个来源收集的数据,并将一组数据指定为正式数据,database-design,Database Design,我想设计一个名为“水果”的表格,其中存储一种水果的名称、价格和来源。样本数据: (Apple, 100c, SuperMarket1) (Orange, 101c, SuperMarket1) (Apple, 99c, SuperMarket2) (Orange, 103c, SuperMarket2) 我指定超市1的橙色价格为官方价格,超市2的苹果价格为官方价格 目前,源不是表的主键,因此,所有非官方条目都不会显示。如果我想存储非官方价格,我需要将源代码转换为主键的一部分。要将条目指定为Of

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

(Apple, 100c, SuperMarket1)
(Orange, 101c, SuperMarket1)
(Apple, 99c, SuperMarket2)
(Orange, 103c, SuperMarket2)
我指定超市1的橙色价格为官方价格,超市2的苹果价格为官方价格

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

我的目标是:

  • 能够存储所有可用的价格,而不必存储在一个表中
  • 官方条目的来源应易于识别
  • 能够以最少的联接数查询官员
  • 一种水果的官方价格不能超过一个
  • 水果的种类不小(水果只是一个例子)并且不断进化。维护一个额外的表来存储每种类型的官方来源可能是一个巨大的负担

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

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

    注意:在上面的模型中,FRUIT.STORE_ID可以为NULL,以打破FK循环,并允许在运行时实际插入新数据。如果您的DBMS支持延迟约束,则此字段可以设置为非空(除非您确实希望允许水果没有官方价格)

    1) 能够存储所有可用的价格,而不必存储在一个表中

    在这个模型中,价格不是每个水果,而是每个商店每个水果的价格

    2) 官方条目的来源应易于识别

    这就是水果店的标识

    3) 能够以最少的联接数查询官员

    4) 一种水果的官方价格不能超过一个

    水果和水果中的每一个水果都由一行表示。STORE_ID每行不能存储多个值

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


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

    这相当于维护一个额外的表来存储每个水果的官方来源。@CandyChiu,而您可以添加另一个表来维护官方来源,这将需要仔细设计键和FK,以避免引用给定水果的无价格商店,并会使数据处理方式复杂化-只有一个字段更简单。对不起!我错过了一个关键的限制。价格每天都有。因此,价格表需要一个名为Date的附加字段。如何更改水果表?@CandyChiu那么,您需要另一个表:
    DAILY\u PRICE(水果ID,商店ID,DAY,PRICE\u值,主键(水果ID,商店ID,DAY),外键(水果ID,商店ID)REFERENCES PRICE)
    并从
    PRICE
    表中删除
    PRICE\u VALUE
    SELECT * FROM FRUIT JOIN PRICE
        ON FRUIT.FRUIT_ID = PRICE.FRUIT_ID AND FRUIT.STORE_ID = PRICE.STORE_ID