关于sql中逻辑主键和业务主键的理解
来源:互联网 发布:在手机淘宝上如何开店 编辑:程序博客网 时间:2024/05/22 08:10
1背景 :在使用hibernate的过程中,遇到了联合主键的困境。
由于原有项目是原生的java语言写的,而现在需要使用hibernate重写。原有的数据库表的设计中,很多表中都是用了联合主键 ,因为这样的设计符合业务上的概念,而且原生的jdbc数据库访问也不存在使用联合主键的困难。
但是,现在一切变了,一方面,我们享受者hibernate的面向对象的变量;一方面,却要忧虑不能使用hibernate的原有功能时的无所是从。
我在网上搜集了一些讨论,结论是除非你真的精通hibernate,否则不要使用hibernate的联合主键功能,因为这会给你带来很多意外的烦恼。幸好,以前的项目也是我写的,因此,
我决定把数据库改了,原来正在运行基于原生java语言开发的项目也响应更改。
2 因此接下来要讨论如何改的问题,如何能够尽量不影响原来项目的运行,而又能以最小的工作量解决当前项目的困境呢,这就牵涉到了本文要讨论的概念了,
逻辑主键和业务主键—— 我的理解如下
逻辑主键---通俗的说,是给机器的,它的目的是让机器能够正确标识记录
业务主键----是给人(程序员)来理解的,它的目的是让我们更好的理解项目的设计思想,以便于开发。
举个例子:我原来的项目中 有2个表
sh_device 主键 dev_GUID
sh_maintain 主键 ma_dev_GUID, ma_order
在sh_maintain 中,使用了联合主键,其中ma_dev_GUID关联了sh_device的dev_GUID,
ma_order 表示在某一个设备下的维修记录顺序号比如 1,2,3...,是一个局部的值。在不同的dev_GUID下可以重复。
这里 的ma_dev_GUID和ma_order就可以理解为业务主键,因为它表示了我们的设计意图
现在,使用hibernate开发时,由于使用联合主键实施开发时有困难,需要把联合主键改为 单一主键。
因此,可以为sh_maintain 增加一个字段 比如ma_GUID作为主键, 用来唯一标示记录,原来的2个字段的主键标识取消,但是保留这2个字段的,以便原来的程序能继续运行。这个ma_GUID就可以认为是逻辑主键,虽然它不如以前的双主键更清晰的表达设计意图,但是却能够让机器更好的执行。
- 关于sql中逻辑主键和业务主键的理解
- 关于业务主键和逻辑主键
- 关于业务主键和逻辑主键
- 关于业务主键和逻辑主键
- 业务主键和逻辑主键
- 对逻辑主键、业务主键和复合主键的思考
- 对逻辑主键、业务主键和复合主键的思考
- 数据仓库 数据库 建模:关于业务主键和逻辑主键的取舍 - [s00n原作]
- 逻辑主键还是业务主键?
- 逻辑主键 与 业务主键
- 关于数据库表应该采用逻辑主键还是业务主键的讨论
- 主键的选择,应该是业务有意义还是业务无意义,应该是逻辑主键还是业务主键
- 业务主键和代理主键的比较
- 业务主键 Vs. 逻辑主键,到底哪个好?
- Hibernate中物理主键,逻辑主键,修改主键相关
- SQL 关于主键和自增长标识列的修改
- 错过方知我不知:数据库设计中主键唯一且与业务逻辑无关的重要性
- SQL Server中获取表的主键和外键
- sticky footer
- List的clear()方法和removeAll()方法 的区别
- VMware虚拟机安装
- Linux系统中编译boost 1.65.1库的方法
- 数据结构实验之查找四:二分查找
- 关于sql中逻辑主键和业务主键的理解
- 1478 Problem A总成绩排序(结构体专题)——软四课堂小测试2——2017-12-22
- C 数据结构 笔记(四) —— 队列
- Linux inode、block、文件类型、软硬链接等相关文件的知识
- 使用GitExt将本地项目连接远程Git码云
- 在VM虚拟机中安装Centos操作系统
- Number of Longest Increasing Subsequence
- 四大检索工具 和 论文查找网址大全
- 数据结构实验之排序六:希尔排序