快速业务通道

精通Grails: 使用Ajax实现多对多关系 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
te }

您应该注意到两点。首先,Flight 中的 belongsTo 字段由一个值转变为多个值的散列映射(hashmap )。一个 Trip 可以有多个 Flight,一个 Airline 也可以有多个 Flight。

其次,我向 Airline 添加了一个新的 iata 字段。这个字段用于填写 International Air Transport Association (IATA) 编码。IATA 为每个航空公司分配了一个惟一的编码 — UAL 表示 United Airlines 、COA 表示 Continental、DAL 表示 Delta,等等(参见 参考资料,获取 IATA 编码的完整列表)。

最后,您应该注意到我制定了另一个架构决策,这次加入了 Airline 和常飞顾客(frequent-flier) 编号之间的关系。由于我假设只有一个用户使用这个系统,因此可以将 FrequentFlier 作为 Airline 类 的一个属性。每个航空公司最多只有一个 frequent-flier 编号,所以这是最简单的可能的解决方案。如 果这次旅行计划的需求发生了更改,而且我需要支持多个用户,那么就出现了另一个 m:m 关系。一个乘 客可以有多个 frequent-flier 编号,一个航空公司也可以有多个 frequent-flier 编号。创建一个连接 表来管理这个关系会非常适合。现在我将使用简单的解决方案,但是如果需求发生了更改,我会将 FrequentFlier 字段标记为未来的一个重构点。

精通Grails: 使用Ajax实现多对多关系(3)

时间:2011-08-02 IBM Scott Davis

城市还是机场?

现在将 City 添加到代码中 — 或许不用添加。尽管您可能会说,“飞往芝加哥” 理论上讲是飞往一 个机场。我是飞往芝加哥的 O''Hare 机场还是 Midway 机场?当我飞往纽约时,是飞往 LaGuardia 还是 JFK?显然我需要一个 Airport 类来替代简单的 City 字段。清单 5 展示了 Airport 类:

清单 5. Airport 类

class Airport{   static hasMany = [flights:Flight]   String name   String iata   String city   String state   String country }

在清单 5 中可以看到,iata 字段又回来了。这次 DEN 表示 Denver International Airport,ORD 表示 Chicago O''Hare,MDW 表示 Chicago Midway,等等。您也许想创建一个 State 类并设置一个简单 的 1:m 关系,或者甚至创建一个 Location 类来封装 city、state 和 country。我将把这个困难的任务 留给您自己来完成。

现在我将 Airport 添加到 Flight 类,如清单 6 所示:

清单 6. 将 Airport 关联到 Flight

class Flight{   static belongsTo = [trip:Trip, airline:Airline]   String flightNumber   Date departureDate   Airport departureAirport   Date arrivalDate   Airport arrivalAirport }

但是,这一次我显式地创建 departureAirport 和 arrivalAirport 字段,而不是隐式地使用 belongsTo 字段。用户界面看起来没有任何不同 — 这些字段都将使用组合框来显示 — 但是类之间的关 系稍微有些不同。删除一个 Airport 不会连带删除相关联的 Flight,而删除一个 Trip 或 Airline 则 会删除相关联的 Flight。我在此处提供了两种方法,以说明将各种类关联起来的不同方式。实际上,您 可以自己决定是否希望类保持严格的引用完整性(换句话说,所有删除操作都是级联的)或者允许更松散 的关系。

多对多关系的实际效用

现在,就绪的对象模型可以很好地模拟真实世界。我一年中要经历许多旅行,经历许多不同的航空公 司,飞往许多不同的机场。将所有这些关系联系起来的就是一个 Flight。

查看一下底层数据库,我只看到了期望看到的表,如清单 7 中的 MySQL show tables 命令的输出所 示:

清单 7. 底层数据库表

mysql> show tables; +----------------+ | Tables_in_trip | +----------------+ | airline    | | airport  

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号