【问题标题】:Confusion with class diagram与类图混淆
【发布时间】:2014-01-14 19:35:57
【问题描述】:

我必须实现一个搜索人员的网络应用程序,并且我想为在不同公司工作并具有一定等级(如工程师或技术人员)的人制作模型或......

person 在一个company 中工作
company 有很多person
company 有很多grade
grade 可以在很多company

那么什么类图最好:

1)

2)

3)

Web 应用程序将在表 persongradecompany 或所有组合中搜索 nameaddress。 我将使用hibernate 来映射我的数据库(mysql)。

【问题讨论】:

    标签: hibernate jpa uml


    【解决方案1】:

    第一个没有意义,因为人与人之间没有直接的联系。

    2nd就是你所需要的,一个人属于一个公司,有一个档次。

    编辑

    如果您还想将成绩链接到公司,则 OP 编辑​​后的第三个选项似乎符合您的需求。这实际上是第 1 和第 2 的组合。

    【讨论】:

    • 但就我而言,每家公司都有成绩。我必须按年级搜索。
    • @Youssef,你的搜索结果应该是什么/你想用等级搜索什么?而且你不用多说什么,一个人也可以属于一个以上的公司,并且在他们所属的每个公司中都有一个等级。
    • @Youssef 检查我的编辑,尝试在您的数据库中实现该模型并编写一些简单的 SQL 查询来测试它,之后您可以使用 JPA 进行 OR 映射。
    • 所以即使我在 3 个表中有一个循环也没关系?
    • @Youssef 为什么要循环?你可以编写一个查询来一次得到你想要的结果,见JPA query language(oracle docs)。拥有要搜索的实体后,您可以使用已相应注释的成员字段访问其所有相关数据。
    【解决方案2】:

    我同意#3 是要走的路。如果您自己实现数据库结构,这听起来像是,我建议您绘制详细的 (EER) 图,显示关系类型(如一对多)并列出键。

    我知道您没有明确提出要求,但这将是您的下一步。每个元素的主键是什么?您是否需要“中间”表来处理多对多关系,例如 GRADE 和 COMPANY 表?

    【讨论】:

    • 正是我想知道我是否需要 GRADE 和 COMPANY 的“中间”表?因为我没有额外的信息可以放在这张表中。剩下的主键和外键都可以。
    • 我之前发布了一个主题 (here) 但我没有找到好的解决方案。
    • 这取决于您要使用的技术,但中间表将为您提供最规范的选项。
    【解决方案3】:

    不要忘记聚合 - 对于连接人员-公司应该是,对于人员级它可以。

    不要忘记多样性——一个人可以有工作也可以没有。 一个人总是有他/她达到的最好成绩。 对于任何年级,至少有一个人。 一家公司可以有任意数量的员工,包括 0。

    在现实生活中,只有当它们的名称与它们所指向的类不同时,我才命名连接结束。但对于研究,最好始终使用结尾名称 - 以便更好地理解。

    还有主要的 - 箭头。一个人引用了一家公司,但反之则不然。 成绩也是一样。

    未来注意事项 - 通过设置箭头/十字、多重性和聚合/组合(如果有的话),您可以检查图表的正确性。如果您尝试完成图表,您会注意到,您不能为图表#1 和#3 完成。所以,它们很糟糕。

    当然,您无法通过这种方式检查模型与现实生活之间的联系,只能检查模型的内部逻辑。但这是一个很好且非常有用的检查。不要忽视它。

    至于第三个诊断,您似乎混合了“等级”和“专业化”这两个词。如果您需要同时考虑它们,则需要以下诊断:

    “下一个大于”连接设置了等级的阶梯。

    如果您只需要专业而不需要等级,请简化图表 - 列出与“等级”及其类别的所有联系。注意,你会得到一个你根本没有提到的诊断。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-25
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多