我必须实施一个搜索人员的网络应用程序,我想为在不同公司工作并具有某个等级的人(如工程师或技术人员或......)制作模型。
person
在一个company
中工作
company
有很多person
company
有很多grade
grade
可以有多个company
那么什么类图将是最好的:
1)
2)
3)
网络应用程序将按表name
中的address
或person
或grade
或company
或所有组合进行搜索。
我将使用hibernate
来映射我的数据库(mysql)。
答案 0 :(得分:1)
第一个没有意义,因为没有人与年级之间的直接联系。
第二个是你需要的,一个人属于公司并且有一个成绩。
修改强>
OP编辑后的第3个选项似乎符合您的需求,如果您还想将成绩链接到公司。这实际上是第1和第2的组合。答案 1 :(得分:1)
我同意#3是要走的路。如果你自己实现数据库结构,听起来像,我建议绘制一个详细的(EER)图表,显示关系类型(如一对多)并列出键。
我知道你没有明确要求,但这将是你的下一步。每个元素的主键是什么?您是否需要“中间”表来处理多对多关系,例如GRADE和COMPANY表?
答案 2 :(得分:1)
不要忘记聚合 - 对于连接人员 - 它应该是公司,对于人员等级它可以。
不要忘记多样性 - 一个人可以有工作。 一个人总是有一些他/她达到的最好成绩。 对于任何等级,至少有一个人。 公司可以拥有任意数量的员工,包括0。
在现实生活中,我的名字连接只有在他们的名字与他们指向的类不同时才会结束。但是为了研究,最好总是使用结束名 - 以便更好地理解。
主要的东西 - 箭头。一个人提到了公司,但反之亦然。 与成绩相同。
通知未来 - 通过设置箭头/十字,多重性和聚合/组合(如果有),您可以检查图表的正确性。如果您尝试完成图表,您会注意到,您不能为图#1和#3执行此操作。所以,他们很糟糕。
当然,你无法检查你的模型和现实生活之间的联系,只有模型的内在逻辑。但这是一个很好的非常有用的检查。不要忽视它。
至于第三个诊断,似乎是你在混合术语“等级”和“专业化”。如果您需要同时考虑它们,则需要以下诊断:
“下一个大于”连接设置了等级的阶梯。
如果您只需要专业而不需要成绩,请简化图表 - 将所有与“成绩”及其类别的连接放在一起。请注意,你会得到一个你根本没有提到过的诊断。