Yat*_*oel 5 java database enums
假设我有一个预定义的值列表(RW,FW,4W),表示车辆的驱动类型:
RW - 后轮
前锋 - 前轮
4W - 四轮
现在,我想从上面的3个值中取一个值作为我用户的输入,然后将其存储在数据库中.
据我所知,我可以借助以下任何一种方法执行此操作:
- 在UI上对值进行硬编码,以便UI显示仅具有上述3个值的下拉列表.然后将该值存储String vehicleType在Vehicle vehicle对象的字段中,然后将其存储在DB中String.
缺点:
一世).没有验证对象级别的值
ⅱ).没有验证数据库级别的值.
III).虽然很少需要为列表添加新值,但用户仍然无法在运行时添加新值
- 优点:
一世).无需join在DB处检索vehicle对象
要么
VEHICLE_TYPE在DB中创建一个具有所有3个值的单独表,并将其与VEHICLE表通过表链接.外键.然后从VEHICLE_TYPE表中填充UI的下拉列表.将值存储在vehicle对象中String
- 缺点:
一世).在对象级别没有验证
ⅱ).需要join在DB处检索vehicle对象
- 优点:
一世).验证DB级别的值(通过外键)
ⅱ).用户可以在运行时向列表中添加新值
要么
VEHICLE_TYPE在DB中创建一个具有所有3个值的单独表,但不要将其与VEHICLE表通过.外键.然后从VEHICLE_TYPE表中填充UI的下拉列表.将值存储在vehicle对象和DB中String
- 缺点:
一世).在对象级别没有验证
ⅱ).没有DB级别的验证
- 优点:
一世).没有join需要在数据库级别
ⅱ).用户可以向列表中添加新值
要么
VEHICLE_TYPE在DB中创建一个具有所有3个值的单独表,并将其与VEHICLE表通过表链接.外键.然后从VEHICLE_TYPE表中填充UI的下拉列表.做一个enum VehicleType在Java中,然后添加一个字段VehicleType vehicleType的Vehicle类.根据用户的输入,在字段中存储VehicleType枚举值vehicleType.
-Cons:
一世).必须在两个地方更新列表:VehicleType枚举和VEHICLE_TYPE表.可能会导致不一致.
ⅱ).用户无法在列表中添加新值(他可以在表中添加值但不能更改枚举)
- 优点:
一世).在UI级别进行验证
ⅱ).对象级别的验证
III).数据库级别的验证
问题:我们 是否有其他方式可以执行上述任务,但没有任何上述缺点?
当然。第二个经过修改的:
VEHICLE_TYPE在数据库中创建一个包含所有 3 个值的单独表,并将其与该VEHICLE表通过链接。外键。然后从表中填充 UI 的下拉列表VEHICLE_TYPE。将车辆对象中的值存储为String。调用时vehicle.setVehicleType(),通过检查 DB 中的可能值来验证分配的值是否有效。如果无效,则抛出一个InvalidArgumentException或一个子类。
现在您已经在对象中进行了验证。而且,我不认为必须参加一个骗局。如果不连接表,您将无法做很多事情。这就是为什么你有很多桌子。
| 归档时间: |
|
| 查看次数: |
762 次 |
| 最近记录: |