Fra*_*ète 7 java architecture oop enums entity-relationship
我有枚举CarBrand:
public enum CarBrand {
BMW, MERCEDES, VOLKSWAGEN, AUDI, FORD, OPEL
}
Run Code Online (Sandbox Code Playgroud)
和枚举CarBodyType:
public enum CarBodyType {
SEDAN, MINIVAN, VAN
}
Run Code Online (Sandbox Code Playgroud)
他们之间的关系很多很多.即一个汽车品牌可以有几种车身类型,而车身类型有几个品牌.
如何使用这些枚举在我的代码中定义这样的实体关系模型?
也许我需要在每个枚举中使用make字段作为由另一个枚举参数化的集合?
public enum CarBrand {
BMW, MERCEDES, VOLKSWAGEN, AUDI, FORD, OPEL;
private Set<CarBodyType> bodyTypes;
public Set<CarBodyType> getBodyTypes() {
return bodyTypes;
}
public void setBodyTypes(Set<CarBodyType> bodyTypes) {
this.bodyTypes = bodyTypes;
}
}
Run Code Online (Sandbox Code Playgroud)
和
public enum CarBodyType {
SEDAN, MINIVAN, VAN;
private Set<CarBrand> brands;
// getter and setter
}
Run Code Online (Sandbox Code Playgroud)
这是一个好的解决方案吗?或者通过第三个交叉点实体实现这种关系会更好吗?如果是这样,应该是什么?该实体应该如何设计以及它应包含哪些字段?
几乎可以肯定,某种体型“拥有”品牌是不正确的。一个品牌“有”一种体型很可能是不正确的。您最可能想要建模的是每个品牌允许的体型的一组单独的交集。
您最有可能想要一个Vehicle具有体型和品牌的产品:
public class Vehicle
{
private CarBrand brand;
private CarBodyType body;
...
}
Run Code Online (Sandbox Code Playgroud)
并创建车辆,每个车辆模型一种组合。
回应评论
比如说这个案例呢?如果 Book 和 Author 是枚举。
我认为书籍/作者的示例不适用于枚举(也许您对枚举的使用是问题的核心)。书籍和作者的数量不限;您不会使用封闭集枚举来对书籍或作者进行建模。更进一步,确实,每本书都有一个或多个作者,而每个作者只是在写过一本或多本书的情况下才是作者(否则他们只是一个渴望成为作家的人)。
在书籍和作者的关系建模中,您将拥有一个Book表、一个Author表和一个单独的关系表,其中的关系表是和表BookAuthor的外键的结合。在对象术语中,将“表”一词更改为“对象”,尽管在对象模型中,您可能会将“表”替换为每本书中的一组作者和/或每个作者中的一组书籍。BookAuthorBookAuthor
| 归档时间: |
|
| 查看次数: |
1162 次 |
| 最近记录: |