类图转换为关系模型;继承和匹配表

2024-03-18

对于一个学校项目,我应该设计上学期项目的系统。我们使用 UML,创建一个极其简单的用例图(没有<<extend>>键入废话,只是指向系统内部用例的参与者),从中我们制作一个类图,然后是一个关系模型。

用例和类图尝试:

最后一张图只是我最终认为可能我的用例是问题所在。

我的应用程序允许人们/餐馆列出他们愿意捐赠的食物。为无家可归者提供食物的慈善机构索要食物。如果有比赛,慈善机构可以创建一条卡车路线来从所有比赛中领取食物。

我无法弄清楚如何表示匹配,以及 FoodItems 的菱形和连接到路线的匹配是否有意义。我知道在关系建模中继承通常是一个坏主意。难道只是到处都有 FK 的问题吗?我感觉自己在兜圈子。


这个对象关系映射主题可能非常复杂。但看看你的图表,这里有一个过于简单的经验法则:

  • 将没有泛化和专门化的每个类映射到关系表。什么时候ID字段 https://martinfowler.com/eaaCatalog/identityField.html存在,这些将充当主键。
  • 将每个具有两个专业化的类映射到一个关系表,该表组合了该类的字段及其专业化的所有字段。这种技术称为单继承表 https://martinfowler.com/eaaCatalog/singleTableInheritance.html。它并不总是一个好的解决方案,但它绝对适合您的情况。
  • 对于每个一对 n 关系 (1 - 1..*, or 1-0..*) 将 1 侧的主键 (ID) 添加为 n 侧表中的外键。对你的聚合也这样做。这就是所谓的外键映射 https://martinfowler.com/eaaCatalog/foreignKeyMapping.html.
  • 对于您的 n 到 n 链接(1..* - 1..*)您需要添加一个关系表,其中包含两个链接表的 ID(每个表都定义为外键,并且两者一起作为组合主键)。这就是所谓的关联表映射 https://martinfowler.com/eaaCatalog/associationTableMapping.html.
  • 在第二次进行一对一聚合ItemMatch,我认为添加两个对应于一个的字段就足够了foodItemID(使用不同的名称)。
  • 您还需要将作为结果添加的外键定义为可选(可为空)0..*关系

附加读物:

  • 马丁·福勒的优秀著作《企业应用架构模式 https://martinfowler.com/books/eaa.html如果想了解更多信息,请详细解释几种继承映射策略的优缺点。除了简单的单一继承表之外,您还会发现更复杂的替代方法,例如类表继承 https://martinfowler.com/eaaCatalog/classTableInheritance.html, 具体表继承 https://martinfowler.com/eaaCatalog/concreteTableInheritance.html and 继承映射器 https://martinfowler.com/eaaCatalog/inheritanceMappers.html.
  • 网络文章将对象映射到数据模型 https://www.visual-paradigm.com/support/documents/vpuserguide/3563/3564/85444_mappingobjec.html建议来自granier https://stackoverflow.com/users/5724677/granier在评论中(谢谢!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类图转换为关系模型;继承和匹配表 的相关文章

  • python 类工厂继承随机父类

    我有一些这样的代码 class Person object def drive self f t raise NotImplementedError class John Person def drive self f t print Jo
  • 用于导入基本模板类的所有名称的 C++ 宏[重复]

    这个问题在这里已经有答案了 当从模板基类派生类时 必须使用以下语法this gt member or using Base member访问基类的成员 如果基类是通用模板参数并且确定某些成员存在 也会发生同样的情况 是否可以编写一个宏来 导
  • 在序列图中引用给定类的实例

    我必须建模一个系统 其中类的对象Person将调用静态方法getBook Book在课堂上Book这将返回特定书籍的实例 如何引用操作得到的图书实例 到目前为止 我可以想到两种方法 这两种方法我都没有见过 使用过 这就是为什么我正在寻找co
  • C++ 是否要求从派生类初始化基类成员?

    class Base public int a Base a 0 virtual Base class Derived public Base public int b Derived b 0 Base pBase static cast
  • 私人继承

    我不完全理解这一点 class Base public Base cout lt lt Base lt lt endl virtual void call cout lt lt Base call lt lt endl class Deri
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 实体框架 - 选择特定列并返回强类型而不丢失强制类型转换

    我正在尝试做类似的事情这个帖子 https stackoverflow com questions 1094931 linq to sql how to select specific columns and return strongly
  • 如何将图数据结构持久化到关系数据库中?

    我考虑过创建一个顶点表和一个边表 但是在内存中构建图和遍历子图是否需要大量查找 我想避免过多的数据库读取 还有其他方法可以保存图表吗 旁注 我听说过 Neo4j 但我的问题实际上是如何在概念上表示标准数据库中的图形 不过 我对一些 NoSQ
  • 无法从 List 转换为 List

    我有这样的设置 abstract class Foo class Bar Foo 以及其他地方的这种形式的方法 void AddEntries List
  • 使用 Visual Studio 2008 在类图中显示组合和依赖关系

    我试图使用 VS 2008 在类图中显示组合和依赖关系 但没有与上述关系相关的图表 请在这件事上给予我帮助 Visual Studio 2010 Ultimate 支持 UML 类图上的组合 依赖关系和许多其他关系 UML 类图 参考 ht
  • MySQL 和 MariaDB 数据库有什么区别?

    我已经使用 XAMPP 很长时间了 很惊讶 XAMPP 已经从 MySQL 切换到了 MariaDB https www apachefriends org index html https www apachefriends org in
  • Java 通用问题

    下面的代码可以编译 但如果我取消注释行 它不会编译 我很困惑为什么 HashMap 确实扩展了 AbstractMap 并且声明映射的第一行可以正常编译 import java util AbstractMap import java ut
  • 系统间依赖关系的UML图

    哪种 UML 图最能显示我们的 IT 系统和其他外部 IT 系统之间的依赖关系 例如我想在图表上显示 系统A从系统B获取数据 系统B可以调用系统A的一些功能 我想知道组件图和序列图之间的关系 你怎么认为 你的问题不是很具体 因为所有 UML
  • 强制派生类实现接口

    我今天在这里 就像昨天一样 遇到了另一个奇怪的界面问题 我有一堂课 public class InputDevice
  • VB.NET 与 C# 中的属性实现多级继承

    假设我有 2 个接口 如下定义 public interface ISkuItem public string SKU get set public interface ICartItem ISkuItem public int Quant
  • 使用绝对导入时,pyreverse 不会在 UML 中显示组合关系

    我在生成 UML 时遇到问题pyreverse 特别是当类不属于同一模块时以及使用绝对导入时的组合关系 为了说明问题 我有以下两个模块a py and b py在同一个包中 a py from b import B class A def
  • super 在多重继承中无用? [复制]

    这个问题在这里已经有答案了 在多重继承中 super 如何工作 例如这里我有两个init我想通过 super 发送参数 class LivingThings object def init self age name self name n
  • 是否可以为超类实例变量添加JPA注释?

    我正在为两个不同的表创建相同的实体 为了使两个实体的表映射等不同 但仅将其余代码放在一个地方 一个抽象超类 最好的事情是能够在超类中注释通用内容 例如列名 因为它们是相同的 但这不起作用 因为 JPA 注释不会被子类继承 这是一个例子 pu
  • 指向基类的成员指针

    全部 我不明白为什么下面的代码需要强制转换才能工作 有人可以解释一下吗 class Base class Derived public Base class Class public Derived member Derived obj B
  • 如何使用 Entity Framework Code First 在两个实体之间建立多个一对多关系

    下面是保存关系数据库记录的简单方法 该方法运行得很好 我对一种情况有疑问 在此之前 我需要知道如果数据库复杂性增加 我所采用的方法会遇到什么困难 还有更好 高效但简单的方法吗 一对一 tb student store student det

随机推荐

  • Laravel Production 问题 - 使用 Laravel 4.1.x 更新作曲家

    到目前为止 我在部署 Laravel 项目时还没有遇到任何问题 我已经为这个项目部署了将近一年 但出现了一些新的错误 首先 我无法运行作曲家更新 因为它显示此错误 composer update Warning This developme
  • 使用 JDBC 实现迭代器设计模式

    我正在解决以下问题 迭代器设计模式是一种封装性很强的设计模式 举个例子 图书馆需要一个图书管理系统 一堂课为books 存储他们的详细信息和一个类library存储书籍和书架编号 假设图书馆希望使用以下方式将数据存储在数据库中JDBC 如何
  • 程序自我更新的最佳方式

    终止程序然后从正在终止的程序运行附加代码的最佳方法是什么 例如 程序自我更新的最佳方式是什么 您有几个选择 您可以使用另一个应用程序 exe 来进行自动更新 这可能是最好的方法 您还可以在程序运行时重命名程序的 exe 因此 您可以从某个更
  • Java中获取资源文件夹中的文件

    我想读取 Java 项目的资源文件夹中的文件 我为此使用了以下代码 MyClass class getResource myFile xsd getPath 我想检查文件的路径 但它给出了以下路径 file home malintha m2
  • iOS7 导航栏上方的状态栏

    我正在使用 iOS7 测试我的应用程序 但状态栏有问题 基本上状态栏出现在导航栏上 如下图所示 我试着打电话给我viewDidLoad self edgesForExtendedLayout UIRectEdgeNone self auto
  • Webpack @font-face相对路径问题

    我在 angular2 应用程序中使用相对路径加载字体时遇到问题 在 app ts 中我有这两个导入 import public css fonts less import public css main less 在 fonts less
  • WPF组合框基于文本输入的动态过滤

    我似乎无法找到一种直接方法来实现将文本输入过滤到 WPF 组合框中的项目列表中 通过将 IsTextSearchEnabled 设置为 true 组合框下拉列表将跳转到第一个匹配项 我需要的是将列表过滤为与文本字符串匹配的任何内容 例如 如
  • 无法安装 Windows 7 SDK(需要已安装 .NET Framework 4)

    I m trying to install windows 7 SDK on Windows 8 and Windows 10 machines and got this error 如果我单击 确定 我将无法安装我需要的 VC 编译器 因
  • 如何在文件夹及其所有子文件夹中搜索特定类型的文件

    我试图在给定文件夹中搜索给定类型的所有文件并将它们复制到新文件夹 我需要指定一个根文件夹 并在该文件夹及其所有子文件夹中搜索与给定类型匹配的任何文件 如何搜索根文件夹的子文件夹及其子文件夹 看起来递归方法可行 但我无法正确实现 尝试这个 D
  • jQuery 更改媒体查询宽度值

    是否可以与jQuery或其他任何改变宽度值 media query css当页面运行时 例如 如果在 style css 中我有 media screen and min width 400px whatever 将其更改为500px网站加
  • 重新运行(相同)代码后出现 KeyError

    当我尝试运行以下代码时返回 KeyError import pandas as pd import networkx as nx from matplotlib import pyplot as plt G nx from pandas e
  • 如何使用 PIL 创建透明 gif(或 png)(python-imaging)

    尝试去create带 PIL 的透明 gif 到目前为止我有这个 from PIL import Image img Image new RGBA 100 100 255 0 0 0 img save test gif GIF transp
  • java中维护插入顺序的Maps(集合)

    我需要在 Android 应用程序中使用 Java 中的地图 但问题是列表会自动排序 如何使用地图以与插入数据相同的顺序获取数据 你应该使用LinkedHashMap为此目的 访问安卓文档 http developer android co
  • 使用fluid_styled_content,如何在TYPO3 7.5和7 LTS中创建自定义内容元素?

    有人告诉我 使用新的 Fluid styled content 系统扩展在 TYPO3 7 5 中为后端设置自定义的结构化内容元素是一件轻而易举的事 看完之后sysext fluid styled content and sysext ba
  • 如何从 Canvas 对象中删除边框和角? [Fabric.js]

    我在一个项目中使用fabric js 用户可以在画布上绘图 然后保存到png图像 使用canvas toDataURL 函数 但是 我们注意到 如果用户移动对象并单击 保存 按钮 它会保存先前移动的对象的边框和角 当您移动或调整对象大小时
  • 在 SQL Server 2005 中,当用户拥有管理员权限时,有没有办法将默认模式设置为 dbo 以外的任何模式? [复制]

    这个问题在这里已经有答案了 我正在使用带有 Windows 身份验证的 SQL Server 2005 我的登录有管理员权限 对于我的登录 我有一个用户映射到数据库 默认模式设置为 my schema 我的登录名不是数据库的所有者 当我登录
  • 使用 java 脚本未更改 HTML 输入字段的属性

    我有一个表格 有两个字段文具类型和文具请求数量 表格的信纸 rqst 数量字段接受该数字 可以在此字段中输入的最小数量 数量 取决于信纸类型字段的值 即 如果信纸类型字段值为 铅笔 则信纸请求数量字段的最小值属性应为 5 并且如果是 记事本
  • 如何将数据表中的多个列设置为同一数据表中不同列的值?

    假设我有一个包含 6 列的数据框 并且我想将 col 1 3 设置为 col 4 6 中的值 合并时会经常出现这种情况 使用数据框很容易 set seed 1 df lt data frame matrix sample 1 100 30
  • 垂直轮播渲染脚本

    我需要一些有关 CarouselExample 的帮助 可以使用此示例进行检查link http code google com p android ui utils downloads detail name CarouselExampl
  • 类图转换为关系模型;继承和匹配表

    对于一个学校项目 我应该设计上学期项目的系统 我们使用 UML 创建一个极其简单的用例图 没有 lt