关于数据库设计的建议 - SQL 食谱编辑器

Advice on database design - SQL recipe editor

我想为啤酒厂构建一个基于 SQL 的配方编辑器。我有 n 个食谱:

我有 3 个食谱(BeerA、BeerB 和 BeerC):

BeerA 具体设定点可以是:

BeerB 具有相同的步骤、相同的顺序,但设置点不同。 BeerC 只有 3 个步骤。 table 设计的例子是什么?我在想:

如何处理使用不同设定点的步骤?我相信我还需要一个设定点 table,但如何设计它?

你所描述的是一个合理的起点;我会有一个“啤酒”实体,让您可以保存有关啤酒的信息,而且我还会对食谱进行某种版本控制(或 start/end 日期)——以防它发生变化。

所以像这样(只是一个例子,并不意味着是一个确定的模型):

-- Beer category BCT exists.
--
category {BCT}
      PK {BCT}
-- Brewing step STP exists
--
step {STP}
  PK {STP}
-- Step sequence number ST# for brewing beer
-- of category BCT is step STP.
--
cat_step {BCT, ST#, STP}
      PK {BCT, ST#}

FK1 {BCT} REFERENCES category {BCT}
FK2 {STP} REFERENCES step     {STP}


-- Note: ST# in [1,2,3 ..]
-- Beer BER is of beer category BCT.
--
beer {BER, BCT}
  PK {BER}
  SK {BER, BCT}

FK {BCT} REFERENCES category {BCT}
-- Step sequence number ST# of recipe
-- for brewing beer BER of beer category BCT
-- is at temperature TMP deg, for TIM minutes.
--
recipe {BER, BCT, ST#, TIM, TMP}
    PK {BER, ST#}

FK1 {BER, BCT} REFERENCES beer     {BER, BCT}
FK2 {BCT, ST#} REFERENCES cat_step {BCT, ST#}

注:

All attributes (columns) NOT NULL

PK = Primary Key
AK = Alternate Key   (Unique)
SK = Proper Superkey (Unique)
FK = Foreign Key
Using suffix # to save on screen space.
OK for SQL Server and Oracle, for others use _NO.
For example, rename OPT# to OPT_NO.