Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据库设计建议-SQL配方编辑器_Sql_Database Design_Recipe - Fatal编程技术网

数据库设计建议-SQL配方编辑器

数据库设计建议-SQL配方编辑器,sql,database-design,recipe,Sql,Database Design,Recipe,我想为啤酒厂构建一个基于SQL的配方编辑器。我有n个食谱: 每个食谱都是一个类别的一部分 每个类别都有一个步骤列表 步骤可以在同一类别中以不同的顺序重复使用多次 每一步都有n个设定点 设定值根据配方变化 同一类别中多次使用的相同步骤在同一配方中可能具有不同的设定点 我有3种食谱(啤酒、啤酒和啤酒): BeerA和BeerB是啤酒类,而BeerC是烈性啤酒类 淡啤酒有5个步骤(开始、发酵、等待、发酵、成熟) 所有步骤都有2个设定点(时间、温度) BeerA的特定设定点可以是: 开始:[1

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

  • 每个食谱都是一个类别的一部分
  • 每个类别都有一个步骤列表
  • 步骤可以在同一类别中以不同的顺序重复使用多次
  • 每一步都有n个设定点
  • 设定值根据配方变化
  • 同一类别中多次使用的相同步骤在同一配方中可能具有不同的设定点
我有3种食谱(啤酒、啤酒和啤酒):

  • BeerA和BeerB是啤酒类,而BeerC是烈性啤酒类
  • 淡啤酒有5个步骤(开始、发酵、等待、发酵、成熟)
  • 所有步骤都有2个设定点(时间、温度)
BeerA的特定设定点可以是:

  • 开始:
    [10秒,30度]
  • 发酵:
    [2天,27度]
  • 等待:
    [3小时,25度]
  • 发酵:
    [3天,23度]
  • 成熟度:
    [5天,3度]
BeerB具有相同的步骤、相同的顺序,但具有不同的设定点。BeerC只有3个步骤。桌子设计的一个例子是什么?我在想:

  • 配方表(RecipeID、RecipeName、categoryID)
  • 类别表(CategoryID,CategoryName)
  • 步骤表(我需要对类别和配方的引用)

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

您所描述的是一个合理的起点;我会有一个“啤酒”实体,允许您保存有关啤酒的信息,我还会对配方进行某种版本控制(或开始/结束日期),以防它发生变化

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

——啤酒类别BCT存在。
--
类别{BCT}
PK{BCT}
——酿造步骤STP存在
--
步骤{STP}
PK{STP}
——酿造啤酒的步骤序号ST
--BCT类别的第二个类别是步骤STP。
--
猫步{BCT,ST#,STP}
PK{BCT,ST#}
FK1{BCT}引用类别{BCT}
FK2{STP}引用步骤{STP}
--注:ST#in[1,2,3..]
——啤酒BER属于啤酒类别BCT。
--
啤酒{BER,BCT}
PK{BER}
SK{BER,BCT}
FK{BCT}引用类别{BCT}
——配方的步骤序号ST
--用于酿造BCT类啤酒
--温度为TMP deg,持续时间为分钟。
--
配方{BER、BCT、ST#、TIM、TMP}
PK{BER,ST#}
FK1{BER,BCT}引用啤酒{BER,BCT}
FK2{BCT,ST}引用了cat_步骤{BCT,ST}
注:

所有属性(列)不为空
PK=主键
AK=备用键(唯一)
SK=正确的超级键(唯一)
FK=外键
使用后缀#节省屏幕空间。
对于SQL Server和Oracle,可以,对于其他服务器,请使用_NO。
例如,将OPT#重命名为OPT#NO。

有多少种不同的可能设定点?如果这个列表很小,那么有一个更简单的方法。否则,你必须抽象/透视配方设定点关系。对于这个特定项目,我每一步只需要2个设定点,对于下一个项目,它可能会超过10-15个。不过,维基百科文章会给你一个创建数据库表时要遵循的大纲。所有的啤酒都有相同的五个步骤吗,只是温度、时间不同?所有的黑啤酒都有相同的3个步骤,只是温度、时间不同吗?@DamirSudarevic在这个例子中是的。配方中的步骤数或位置可以在主编辑器中修改,但一旦定义/保存了啤酒,将对所有的啤酒使用相同的程序,只在啤酒A或B配方中定义不同的温度和时间。除此之外,啤酒配方中使用两次的同一步骤(在我的例子中是发酵)可能会有不同的温度、时间