2

我在数据库中有两个表

  • FuelStation(fuel_station_id:int(PK),fuel_station_name:varchar,fuel_brand_id:int(FK))
  • FuelBrand(fuel_brand_id:int(PK),fuel_brand_name:varchar)

正如我们所看到的,两个表都是通过链接的。外键(fuel_brand_id)

现在,我想设计一个与上述数据模型相对应的对象模型,但我很困惑从以下两种方法中使用哪种方法:

  • 是否只制作一个班级FuelStationStringFuelStation班级中存储燃料品牌。

或者

  • 做两个类:FuelStationFuelBrand。然后将它们与多对一关系相关联,因为一个加油站将只有一个燃料品牌,但一个燃料品牌可以有多个加油站

Q1。哪种方法更好?

Q2。每种方法的优缺点是什么?


据我所知:

方法 2 的优点

  • 它使我们的对象模型更加精细。

  • 会计。根据良好的设计原则,我们的对象模型必须至少与关系模型一样精细。方法2遵循该原则

方法 1 的优点

  • 无需为每个FuelStation为FuelBrand创建单独的对象
4

3 回答 3

2
  1. 只制作一个类 FuelStation 并将燃料品牌作为 String 存储在 FuelStation 类中。
  2. 创建两个类:FuelStation 和 FuelBrand。然后将它们与多对一关系相关联,因为一个加油站将只有一个燃料品牌,但一个燃料品牌可以有多个加油站。

这两种方法之间没有明确的通用选择,因为很大程度上取决于上下文。一些决定因素:

  • 你有多少个电台和品牌?如果您有大量使用相同燃料品牌的加油站,使用第二种方法可能会更好地避免重复。OTOH 如果实际上每个燃料品牌仅由一个加油站使用(并且不会改变),那么使用第一种方法是有意义的。
  • 是否有可能/预期FuelBrand属性会发生变化,或引入新属性?如果是这样,最好使用第二种方法 - 否则任何更改FuelBrand都需要更改FuelStation类。
  • 未来一个加油站有可能有多个燃料品牌吗?这将再次需要第二种方法。

作为底线,第二种方法更灵活,所以我更愿意这样做,即使现在没有可预见的变化明确需要这种设计 - 在软件开发中,永远不要说永远:-)

于 2010-06-23T08:48:19.127 回答
1

哪个更好取决于您想对这些信息做什么。

a) 如果列出提供某个品牌的所有加油站很有趣,您可能还希望选择从 FuelBrand 名称到 FuelStations 集合的某种地图。

b) 如果燃料品牌有或将有任何你想使用的特性(价格等),最好把它做成一个类。

于 2010-06-23T08:49:35.447 回答
0

无需为每个 FuelStation 为 FuelBrand 创建单独的对象

任何一种方法都具有相同数量的对象 - 您要么有 N 个 FuelBrand 对象,要么有 N 个字符串对象,N 是品牌数或站点数,具体取决于您是否重复使用这些对象。所以这个论点是似是而非的。

我倾向于用一个类来表示每个表,因为它确实明确表明该品牌是一个品牌而不是另一个东西。它还迎合具有相同名称的不同品牌,这是关系模式允许的,尽管可能性不大。

于 2010-06-23T09:05:18.167 回答