设计模式-标识域(Identity Field)

news2024/11/23 10:38:44

目的

为了在内存对象和数据库行之间维护标识而在对象内保存的一个数据库标识域。

关系数据库和内存对象的区别

  • 区分行:关系数据库使用键来区分数据行,而内存对象不需要这样一个键

  • 引用方法:对象系统中通过原始内存位置直接区分对象,数据库需要键区分行

因此,为了满足对数据库的几个基本操作,对象和数据库行之间依靠标识域进行交互。

工作机制

键的选择
两类键:

  • 有意义的键:含有语义的键,如身份证号码,容易出现错误。
  • 无意义的键:数据库顺序码。数据库系统自行维护,不会出现错误。

复杂程度:

  • 简单键:只使用一个数据库域
  • 组合键:使用数据库多个域

唯一性:

  • 表唯一键:在一个表中是唯一的。
  • 数据库唯一键:对任何表的任何数据行都是唯一的。

标识域的处理

  • 简单键:比如使用一个简单的整数键即可,并且容易做等值比较。
  • 组合键:等值比较复杂些,需要单独一个类来处理-键类。

标识域的表示

  • 采用基本结构表示标识域共同特征,不同的情况在子类中处理。
  • 只用一个单独的键类,维护一个键对象的普通列表。
  • 每一个领域类对应一个键类。

创建新键

  • 自动生成,但要依赖于不同数据库系统提供的不同功能。
  1. 自动生成域。缺点是:难以确定生成什么键值,如插入一份订单以及多个订单项。
  2. 数据库计数器。如Oracle的序列,可以让序列以任何整数增长,但没有统一标准。
  • GUID(全局唯一标识符),缺点:生成算法使用了以太网卡地址、纳秒级的时钟、芯片ID码和其他可能的数字,生成的结果串比较大。
  • 自己产生键值。利用算法找到表中的最大项。
  • 键表。包含两列:名字和下一个有效值,如果使用表唯一键,对于数据库中每一个表都有一行数据与之对应,如果使用数据库唯一键,只有一行数据与之对应。
     

使用时机

  • 一般在使用领域模型或者行数据入口时使用;
  • 在事务脚本、表模块或者表数据入口不需要;
  • 对于有值语义的小对象,如货币或者日期范围等自身不构成表的对象,最好使用嵌入值
  • 还可以扩展标识映射来维护标识域,一般用于不便在内存对象中保存标识域的系统中

示例之一-使用整型键(C#)

键在两种情况下很重要:查找和插入。
查找分为两步:加载多行到一个数据集中;查找选出特定的记录。


插入。使用简单的整数标识域,插入行为可以层超类型上实现

示例之二-使用键表(Java

创建单独的键产生器

示例之三-使用组合键(Java

组合键的处理最好采用键类,应具有存储键中多元素并且能判断两键相等

领域对象的层超类型需要一个键域

示例之四-使用组合键(Java

读取订单及订单项。分为查找(找到正确的行)和加载(从行中加载到领域对象),本例的思想:把单键,即整型键的行为作为默认的情形,子类可以覆盖该默认行为。

读取订单及订单项。分为查找(找到正确的行)和加载(从行中加载到领域对象)。

订单和订单项分别用具体的行为覆盖层超类型中的方法

插入订单及订单项(更新和删除操作类似)。

本例的思想:对于单键,即整型键的行为作为默认的情形,子类可以覆盖该默认行为。

同时把键数据和对象中的数据分开插入,因为可以为键提供默认行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2036313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【3】字节码文件的组成

一.应用场景与学习路线 二.以正确的姿势打开文件 使用记事本和NotePad打开字节码文件很不方便 三.字节码文件的组成

Spring MVC源码详解

什么是Spring MVC ? Spring MVC就是SpringMVC。 Spring就不介绍了,什么是MVC? M:模型,javabeanV:视图,如jspC:控制层,如Controller、Servlet SpringMVC请求处理流程 用…

图像处理(空域变换(上))

数字图像处理 参考视频 Task 1 亮度变换 1. 幂律变换 伽马变换本质上是对图像矩阵中的每个值进行幂运算。 幂函数 s c r γ ( r ∈ [ 0 , 1 ] ) \text{幂函数}scr^γ(r\in[0,1]) 幂函数scrγ(r∈[0,1]) 其中,r为灰度图像的输入值(原来的灰度值&…

<数据集>集装箱缺陷识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:3793张 标注数量(xml文件个数):3793 标注数量(txt文件个数):3793 标注类别数:4 标注类别名称:[DAMAGE - DEFRAME, DENT, DAMAGE - RUST, DAMAGE - HOLE] 序号类别名…

高分六号卫星助力农业监测_卫星介绍_论文分享_数据获取

卫星遥感已经成为农业发展的重要支持工具。《“数据要素X”三年行动计划(2024-2026年)》指出,在现代农业交通运输、应急管理等领域鼓励探索利用遥感数据。为什么高分六号会经常应用于农业检测呢?本文将介绍高分六号卫星的农业检测特性、在农业应用中的优势、具体农业…

Video视频抽帧和WebCodecs API视频抽帧介绍

目录 mp4Box抽帧 ffmpeg抽帧 video元素抽帧 WebCodecs 核心API 视频文件是一个容器,里面有很多不同的轨道信息。如:图像、声音、字幕等。而视频图像信息又是由一系列图片序列帧的集合。如10秒时长的视频,假设每秒30帧。那大概有300条图像…

二叉树——9.找树左下角的值

力扣题目链接 给定一个二叉树,在树的最后一行找到最左边的值。 示例: 输出:7 题干很简单,找到树的最后一行,在该行找到最左边的值,结合完整代码进行分析。 完整代码如下: class Solution:d…

Django后台数据获取展示

​ 续接Django REST Framework,使用Vite构建Vue3的前端项目 1.跨域获取后台接口并展示 安装Axios npm install axios --save 前端查看后端所有定义的接口 // 访问后端定义的可视化Api接口文档 http://ip:8000/docs/ // 定义的学生类信息 http://ip:8000/api/v1…

Springboot发邮件如何配置SMTP服务器信息?

Springboot发邮件安全性考虑?如何用Springboot发信? 在 SpringBoot中配置邮件发送功能相对简单,但需要正确设置 SMTP 服务器信息。AokSend将详细介绍如何在 SpringBoot应用程序中配置 SMTP 服务器信息,以实现邮件发送功能。 Spr…

如何构建一个高效的编程学习笔记系统(万字总结)

你是否曾经在编程学习的海洋中迷失方向?是否感觉自己学了很多,却总是记不住关键知识点?别担心,今天我们将一起探索一种革命性的笔记方法,它将彻底改变你的学习体验! 目录 引言:为什么我们需要…

鸿蒙(API 12 Beta3版)【本地媒体会话概述】 音视频播控服务

交互过程 本地媒体会话的数据源均在设备本地,交互过程如图所示。 此过程中涉及两大角色,媒体会话提供方和媒体会话控制方。 说明 媒体会话控制方为系统应用,三方应用可以成为媒体会话提供方。 本地媒体会话中,媒体会话提供方通…

[大模型实战] DAMODEL云算力平台部署LLama3.1大语言模型

[大模型实战] DAMODEL云算力平台部署LLama3.1大语言模型 目录 一、LLama3.1二、DAMODEL云算力平台2.1 提供的服务2.1.1 AI训练2.1.2 AI推理2.1.3 高性能计算2.1.4 图像/视频渲染2.1.5 定制化部署 2.2 支持的GPU 三、在DAMODEL部署LLama3.13.1 在DAMODEL创建实例&…

【案例43】打开节点-后台任务日志优化案例

问题现象 通过SPR日志发现 打开节点-后台任务日志节点sql调用严重。 通过nmc查看,后台线程耗时20s ,基本都卡在sql层面 一直在执行如下sql selectl.pk_workingtasklog frompub_workingtasklog l inner joinpub_alertregistry ron l.pkregistry r.pk_a…

Black Forest Labs 的 Flux——文本转图像模型的下一个飞跃,它比 Midjourney 更好吗?

一、前言 Black Forest Labs是开创性稳定扩散模型的团队,现已发布Flux——一套最先进的模型,有望重新定义 AI 生成图像的功能。但 Flux 是否真正代表了该领域的飞跃?它与 Midjourney 等行业领导者相比如何?让我们深入探索 Flux 的…

【Kubernetes】Service 概念与实战

Service 概念与实战 1.通过 Service 向外部暴露 Pod2.Service 的多端口设置3.集群内部的 DNS 服务4.无头 Service 在 Kubernetes 中部署的应用可能对应一个或者多个 Pod,而每个 Pod 又具有独立的 IP 地址。Service(服务)能够为一组功能相同的…

DI (providedIn: XXXModule)

angular版本为^17.3.0; 依赖注入Module 代码结构如下: 点击后为 demo2 works!demo2 providedIn Demo1Module depdemo2 works!demo2 providedIn Demo1Module 打包后大小为 改写为 demo2去掉 imports: [Demo1Module], 打包后大小为 结果比较&#…

DAMA学习笔记(十五)-数据管理组织与角色期望

1.引言 随着数据领域的快速发展,组织需要改进管理和治理数据的方式。当前,大多数组织正面临着越来越多的数据。这些数据格式多样、数量 庞大,并来源于不同的渠道。由于数据数量和种类的增加,加剧了数据 管理的复杂性。与此同时&am…

shiro注解不起作用:shiro进行权限校验时,@RequireRoles(“admin“)注解不起作用的解决方法

今天在写前后端分离项目时,用jwt加shiro进行登录权限校验时,RequireRoles("admin")注解不起作用,记录一下。 前提:数据库里面的user_type代表用户类型 :0普通用户 ;1:专家&#xff1…

Introduction to Snapdragon Profiler (Snapdragon 分析器)

Introduction to Snapdragon Profiler {Snapdragon 分析器} 1. Snapdragon Profiler2. Release Notes3. Tools and resourcesReferences Snapdragon Profiler (骁龙分析器) https://www.qualcomm.com/developer/software/snapdragon-profiler Snapdragon Profiler Documentati…

HAProxy基本配置及参数实操

目录 ​编辑什么是负载均衡 为什么用负载均衡 四层和七层的区别 实验环境 实验步骤 webserver上安装nginx 启动nginx 安装haproxy 编辑配置文件 多进程 多线程 SORRY SERVER 访问重定向 maxconne最大可承受连接 socat 工具 常用示例 ha p r ox y 的 算 法 静 …