使用JPA的复合键的最佳实践是什么?

时间:2014-07-22 20:27:32

标签: mysql hibernate jpa

我正在为我的项目创建一个数据库,我对最佳实践存在疑问。 我的具体案例是: 我有一张桌子,可以存放一栋名为" floor" 我有第二张桌子可以存放名为" building" 我有第三个表存储它们之间的关系,称为building_x_floor

问题在于第3张表。 我该怎么办?

  1. 只有两列,一个持有FK到建筑物PK,另一个持有FK到地板PK;
  2. 上面有两列,第三列有PK并且控制与触发器的一致性,禁止插入(idbuilding,idfloor)的复制操作?
  3. 我的第一个想法是使用第一个选项,但我在谷歌上搜索我说它并不总是最好的选择。

    所以我要求指导。 我正在使用MySQL 5.6.17

2 个答案:

答案 0 :(得分:0)

您不需要第三张桌子。因为buildingfloor之间存在一对多的关系。 因此,一栋建筑有很多楼层,一层楼属于一栋楼。不要让事情复杂化。即使你需要一个带有复合键的表,你也应该小心。您需要覆盖equalshashCode方法。

答案 1 :(得分:0)

我仍然不满意这种方法。我并不是说它是错误的或不合适的,远非如此。我试图理解信息将如何组织以及它将如何表现。

如果我有一个1:*的关系,就像一个学生可能会在一个学期内参加大学课程中的一个以上的课程,我会有第三个学期(学期,idstudent,iddiscipline)。

如果我试图摆脱连接表,我的关系将使用学生表内的FK或主题表内部。这样做是没有意义的,因为学生表是一组表,用于注册与人的信息相关的一组信息,而纪律表包含一个学科的数据,如内容,小时......它更像是一个参数表。

所以我需要一个表来加入。