Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Mysql 在关系数据库中转换UML聚合_Mysql_Database_Orm_Uml_Class Diagram - Fatal编程技术网

Mysql 在关系数据库中转换UML聚合

Mysql 在关系数据库中转换UML聚合,mysql,database,orm,uml,class-diagram,Mysql,Database,Orm,Uml,Class Diagram,我正在制作一个JavaFX桌面应用程序。这是一个跟踪餐厅订单的销售点系统。我对此非常陌生,在我启动phpmyadmin创建数据库后,事情变得混乱起来 这是我的UML的相关部分: 澄清表格内容的一些示例: 配料表可能包含:面粉、糖、牛肉、鸡蛋 物品菜单桌子可能包含:比萨饼、汉堡 article菜单由一堆成分组成,但这些成分仍然可以独立存在,所以我认为这是一个聚合 问题是将其转换为关系数据库,尤其是聚合 我的尝试: 在article菜单中,“recette”属性是引用component表中的行的

我正在制作一个JavaFX桌面应用程序。这是一个跟踪餐厅订单的销售点系统。我对此非常陌生,在我启动phpmyadmin创建数据库后,事情变得混乱起来

这是我的UML的相关部分:

澄清表格内容的一些示例:

  • 配料表可能包含:面粉、糖、牛肉、鸡蛋
  • 物品菜单
    桌子可能包含:比萨饼、汉堡
  • article菜单
    由一堆成分组成,但这些成分仍然可以独立存在,所以我认为这是一个聚合
问题是将其转换为关系数据库,尤其是聚合

我的尝试:
article菜单
中,“recette”属性是引用
component
表中的行的FK,“recette”属性的类型为
ENUM
,它可以保存用户在
article菜单
中创建行时定义的许多值

示例:
article菜单
表中有一行表示比萨饼,它的属性之一是recette类型的
ENUM
,值为“奶酪、面粉、酵母、洋葱、番茄、蘑菇、油”

我的问题: 这是表示聚合的一种可接受的方式吗?最理想的方式是什么

编辑:

读了克里斯托夫的答案后,很明显我没有 了解什么是
ENUM

他链接的IBM文档消除了我的许多困惑 我想谈谈这个话题

库存信息不应成为
成分表的一部分,因为
相同的
成分可能有许多状态,所以我删除了它
那些

至于每份发票中所用的数量,则应予以说明 使用
recipie
表中的
quantity
属性

因此,我重新思考了我的方法,并提出了以下设计:

您的方法有问题 您实现了Martin Fowler称之为的,它实现了一对多关系:

  • 在这里,
    Recipe
    ('recette')将在
    文章菜单
    成分
    之间实现多对一关系:一篇文章将只有一种成分,一种成分可以出现在多篇文章中
  • 此外,
    ENUM
    允许您为一行选择多个值中的一个值。事实上,它只是使用数字而不是字符串的方便替代品
所以,不,这不是正确的方法

多对多关联和隐藏表 您需要实现多对多关联:每个
文章菜单
可以有许多
成分
,反之,每个
成分
可以在许多
文章菜单
中使用

在RDBMS中,这可以使用。这是一个在概念模型中不可见的表。例如,该关联表可以称为
Recipe
,它有两列:
IDARTICLEMNU
IDIGREDIENT
。然后,您可以找到:

  • 通过查找具有相关
    idArticleMenu
    的每个配方行,可以查看文章的所有成分
  • 通过搜索
    idIngredient
完成您的模型 现在,如果你谈到配方和面粉,你申请表中的下一个问题是:制作一个比萨饼需要多少面粉

不幸的是,这个
数量
不是
文章菜单
的属性,因为同一篇文章的每种成分都可能有不同的数量。它既不是
成分的属性,也不是
成分的属性,因为成分的使用量不同,取决于所使用的物品。那么把这个放在哪里呢

答案是

附加建议 您可以使用聚合来表示整个零件关系。然而,聚合语义在UML规范中没有明确定义。因此,使用它没有根本的好处。因此,您可以在这里使用正常关联


在设计模型(概念模型)中,不应在类中显示实现关系的属性。您可以在它将实现的关联的另一端显示此类属性的名称。如果是一个实现模型,则可以很好地显示表的所有列。通常的做法是为映射到表的每个类使用
«table»
原型

这是一种可以接受的方式吗?不,你应该用另一个表格来表示ArticleMenu和配料之间的关系。这个新表应该是recette(idArticleMenu,IDigredient)我必须对ArticleMenu和Order做同样的操作吗?由于订单中可以有许多ArticleMenu行,因此这不是复合聚合,而是共享聚合。后者没有定义的语义。你可以认为它是不存在的。在配料中包含库存数据似乎是一个糟糕的设计。看看你家里的面粉包装。它是否列出了股票信息?您更多地谈论的是数据库设计,而不是UML设计。您可能应该改为使用ERD?