2020/5/181使用关系数据库实现存储•大多数系统都有数据存储的需求•在实现上,将运行时对象映射为可存储的数据,并存储在关系型数据库中•关系型数据库是目前业界最流行的数据存储技术2020/5/182软件系统与数据库的连接•数据库层由业务层封装,有两种实现方式–自动方式:采用EJB框架,由工具生成基本的映射代码–手工方式:熟悉数据库编程接口,使用SQL语句访问数据库2020/5/1831.表•关系模型基于数据表(也称为关系),表包含列和行登录名称登录密码姓名学号班级Lili******李素丽20080202财务081Jiebao******田洁20091011计科092wangwang******张旺20100806艺术101示例:学生表2020/5/1842.把对象模型映射为关系模型•把对象模型映射为表时,先从分析类图或设计类图开始2020/5/1853映射实体类•为把面向对象的模型中的实体(业务对象)映射到关系模型中,需要引入一个与实体类同名的表•实体表中的每一行都表示业务域中的一个独特对象2020/5/186映射实体类•对于每个简单的字段(原型或字符串),可以在表中添加一个与字段同名的列和一个对应的SQL数据类型•指向(非字符串)对象的实体必须另外处理•为便于面向对象编程,也可以引入一个整数属性(如ID)作为表的主键2020/5/1874映射关联•在将分析类模型映射为设计类模型时,必须把双向分析关联转换为单向指针•关系数据库直接存储双向关联,无须做转换2020/5/1881.一对一关联•对于一对一关联,可以给一个实体表添加外键•外键:是一个表中指向另一个表中主键的一项,即一个表的一行对另一个表的一行的引用2020/5/189把一对一关联映射为外键IDNAMEPRICECARMODELDETAILSID111GreyShadow195003739Fly250001914Dooby93500018IDENGINESIZEDESCRIPTIONADVERTPOSTER193500Pureluxury…Arf.ramArf.jpg183000Powerand…Amd9.ramAmd9.jpg374800Smoothbut…Rcgs.ramRcgs.jpgCARMODEL表CARMODELDETAILS表2020/5/18102.一对多关联•对于一对多关联,可以在“多”表中添加外键2020/5/1811把一对多关联映射为外键IDNUMBER教师编号是否审核通过4M10514TRUE11M937145FALSE2M20314TURE教师编号姓名登录密码注册时间14Visor######2006-10-0945Annex******2006-12-14课件表教师表2020/5/18123.多对多关联•对于多对多关联,一个外键不足以标识关联两端的多个实体•在纯关系模型中,表中的每个值都必须是原子化的,即不是值的集合2020/5/1813多对多关联•由于不能有多值属性,因此需要使用链表•链表中的每一行都表示一个表中的实体与另一个表中的实体之间链接•链表有一个组合主键,它包含两个外键2020/5/1814把多对多关联映射为链表IDNAMEPRICECARMODELDETAILSID111GreyShadow195003739Lacrosse250001914Dooby93500018MAKEIDCARMODELID81116514939839CARMODEL表MAKECARMODEL表IDNAME65AstraMarten9AlphaRodeo8RollsChoiceMAKE表2020/5/18154.关联类•关联类由于有自己的数据,无论关联两端的多重性如何,都必须映射为链表•与普通链表不同,表示关联类的列表有属性列——它们甚至有ID列(如果关联类本身是一个实体)2020/5/1816把关联类映射为链表IDCARMODELIDCUSTMERIDNUMBERTIMESTAMP7334R187a2004-12-0614:23:16.5431222R7b2004-12-0300:03:21.87299724R459b2004-12-0509:45:07.210RESERVATION表2020/5/18175映射对象状态•对于状态机中的对象,需要记录每个对象所处的状态•在业务层,业务对象通过简单字段表示状态,如String或intIDCARMODELIDCUSTMERIDNUMBERTIMESTAMPSTATE7334R187a2004-12-0614:23:16.54301222R7b2004-12-0300:03:21.872299724R459b2004-12-0509:45:07.2100RESERVATION表2020/5/18186.映射继承•为把继承层次映射到表上,可以为每个类引入一个表,其中的列对应于类添加的属性•为找出对象的所有属性,表必须共享相同的主键2020/5/1819IDNUMBERINGOODSTANDINGCARDIDADDRESID4M105TRUE14911M9371FALSE4522M203TURE149MEMBER表IDNAMEAMOUNTDUEPHONE4HelenMeeder0(0452)9498311AliceTara0(0161)8983492GeorageMilo3980(07968)1459933MarySmith0(07968)14599CUSTOMER表IDDRIVERSLICENSE33DUCKMH8L37324NONMEMBER表aNonMemberid=33name=“MarySimth”phone=“(07968)14599”amountDue=0driversLicense=“DUCKMH8L37324”