设计模式-领域逻辑模式-结构映射模式

对象和关系之间的映射,关键问题在于二者处理连接的方式不同。

表现出两个问题:

表现方法不同。对象是通过在运行时(内存管理环境或内存地址)中保存引用的方式来处理连接的,关系数据库则通过创建到另外一个表的键值来处理连接.

对象可以很容易通过集合来表示多个引用,但是规范化要求所有的关系连接都必须是单值的。

例子

一个订单对象自然拥有一个订单项的集合,而这些订单项不需要持有订单对象的引用。然而,表结构中的各订单必须包含一个到订单的外键,因为订单不能有一个多值域。

解决思路:通过对象中的一个标识域来保持每个对象的关系特性,并且查找这些值来保持对象引用和关系键之间的相互映射。

如果一个对象包含一个集合,需要更加复杂的外键模式。

解决思路:必须构造一个新查询来找到所有与源对象的ID相关的行。创建每个返回的对象并加入到集合中,保存包括:保存其中每一个对象,并保证它拥有一个到源对象的外键。这种方法比较混乱。

如果映射双方都存在集合,即多对多的关系。如一个人有多个技能,一个技能有时也需要知道哪些人掌握它。

解决思路:关系数据库不能直接解决这种问题,需要使用关联表映射。

继承关系难以用SQL来处理

解决思路:采取映射的方法

  • 单表继承:为一个层次上的所有类建立一个表
  • 具体表继承:为每一个具体类建立一个表
  • 类表继承:为层次中每一个类建立一个表

三种继承模式的变化

三种继承方式并不互相排斥,在一个层次上(指组合层次)可以混合几个模式。

例如,可以使用单表继承把几个类放到一起并且使用类表继承来处理一些特殊情况。

目前,尽管多继承在多数语言里尽量避免,但是使用接口的时候这个问题仍然在O/R映射中出现,例如Java和.Net中。

相关推荐
panzer_maus6 分钟前
工厂模式、代理模式与单例模式的介绍
java·设计模式·代理模式
糟糕好吃14 小时前
AI 全流程解析(LLM / Token / Context / RAG / Prompt / Tool / Skill / Agent)
前端·后端·设计模式
点灯小铭17 小时前
基于单片机的多路温湿度采集与WIFI智能报警控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
源码之屋17 小时前
计算机毕业设计:Python出行数据智能分析与预测平台 Django框架 可视化 数据分析 PyEcharts 交通 深度学习(建议收藏)✅
人工智能·python·深度学习·数据分析·django·汽车·课程设计
点灯小铭17 小时前
基于单片机的球类比赛专用计分与暂停管理系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
kvo7f2JTy18 小时前
JAVA 设计模式
java·开发语言·设计模式
程序员小寒19 小时前
JavaScript设计模式(九):工厂模式实现与应用
开发语言·前端·javascript·设计模式
清风66666620 小时前
基于单片机的安全带长度高度拉力监测与自动锁紧控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
LanceJiang20 小时前
设计模式在前端的简易实现与作用
前端·设计模式
vx_biyesheji000121 小时前
计算机毕业设计:Python网约车订单数据可视化系统 Django框架 可视化 数据大屏 数据分析 大数据 机器学习 深度学习(建议收藏)✅
大数据·python·机器学习·信息可视化·django·汽车·课程设计