`
ytuwlg
  • 浏览: 92762 次
  • 性别: Icon_minigender_1
  • 来自: 威海
社区版块
存档分类
最新评论

数据库设计 逻辑主键

    博客分类:
  • DB
阅读更多

在数据库设计中我们经常会存在是否为表建立逻辑主键(代理主键)的问题。

使用逻辑主键的好处:

 


1.业务系统中需要关联时使用逻辑ID进行关联--而不是有业务ID做关联--使业务系统具有最大的灵活性,及业务ID也是可以修改的,如果使用业务ID做主键,则该条记录就不能被修改。但是这种情况时有发生。
例如:现在客户所有产品编号要升级在原来基础上加上分公司编号。如果系统采用逻辑ID关联则可以方便的修改产品编号。否则的话


2.优化了表的设计,避免使用联合主键。

 

3.进行多表查询时可以通过关联逻辑ID来提升性能.

 

4.逻辑ID一般采用整形,业务ID通常使用字符类型。整形相对与字符类型无论在建立索引还是外键关联查询效率要高的多。

 

5.使用Hibernate等ORM工具时,获得一些性能提升。(这也是Hibernate所推荐的)

 

6.至于业务ID的唯一性约束可以通过唯一性索引来约束


下面引用论坛上的一些片段:

  

 

 

引用
在对象建模时也有逻辑主键,只是隐含了而已。一个逻辑主键的意思就是对象实例的唯一性,简单地说,人的身份证号码是业务主键,而具体的人则隐含着一个逻辑主键,也就是说不管出现什么样的情况,你还是你(当然不要跟我讲克隆, )。
   在做建模的时候我们当然不会考虑这个问题,因为它和实例有关系,和对象(指的是建模层的对象,不是类的实例)是没有关系的,所以在做建模时是不会考虑的。这也就是我们为什么叫它逻辑主键的意思(表明它在现实领域是看不到,但是是逻辑存在的)。
    再将上面的例子反应到计算机领域,如果拿业务主键身份证作为人的唯一判断,那么就出现了一个问题,所有引用改身份证的地方,如果出现了身份证的改动(客观存在,谁的身份证都升了位),那么将带来很大的麻烦(这种麻烦在现实领域好处理,并且有足够的时间进行处理,但是在计算机领域就不简单了)。
    我的建议:对于业务数据,是需要采用逻辑主键的,对于基础数据,基于多方面考虑,是可以采用业务主键的。

 

引用

   逻辑主键的作用只是关联引用,没有任何别的作用,而在表内的唯一性是通过业务唯一性(建立唯一约束)来保证的。
    我是提倡业务数据采用逻辑主键,基础数据可以根据实际情况采用业务主键的(这里所谓的业务主键并不是业务数据,而是所称的比如国家,货币,城市代码等等之类)。
    我从来不是那种走极端的,因为如果一味全部用逻辑主键,在处理复杂业务的时候,就真的很麻烦了,因为一张业务表往往关联更多的基础表。但是,在业务表里也用所谓的业务主键,那就更差了(基础的东西往往很少改,即算要改,都是有比较长的时间量,并且都是为大家所共知的;而业务的东西,是每一个做软件的最薄弱的,并且是最有可能受到客户影响的,也会是最会引起问题的)。

 

引用

   只要是由用户维护的数据,信息系统就不能假设它不会变。很简单,用户维护的时候会出错。出错了就要改。逻辑主键应该是指没有业务含义,没有业务用途,因此不需要用户维护,甚至不需要给用户看的。因此它也就绝对不会变。这才能真正满足主键“唯一,不变”的要求。

 

引用

   业务主键一般不会是单独的一个字段,那么,在这种主从关系中,是很痛苦的
尤其是我们做的ERP系统,经常会有多层的级联 H-MD-MD这样的结构,如果使用业务主键,简直是不可想象的
所以,基本上都是UUID作为主键



最后,如何在运行效率,开发效率以及维护上找个平衡点是关键!!!

 

分享到:
评论

相关推荐

    数据库设计模板数据库设计模板

    数据库设计模板是指在设计数据库时所使用的一种标准化的模板,旨在帮助数据库设计者系统地设计数据库的各个方面,包括数据库的逻辑设计、物理设计、数据库命名规则等。下面是对数据库设计模板的详细解释: 数据库...

    数据库设计:逻辑结构设计.pdf

    【数据库设计:逻辑结构设计】 逻辑结构设计是数据库设计的关键环节,它的主要任务是将概念模型转换成符合特定数据库管理系统支持的数据模型,通常这个过程涉及将E-R模型转化为关系模型。这一过程包括四个主要步骤...

    数据库逻辑结构设计(学生成绩管理系统)

    数据库逻辑结构设计在学生成绩管理系统中的应用 数据库逻辑结构设计是数据库设计的重要组成部分,它决定了数据库的基本逻辑结构,即表的结构设计。学生成绩管理系统的数据库逻辑结构设计是指根据系统的需求,设计...

    数据库设计文档.pdf

    数据库设计文档主要包括数据库环境说明、数据库的命名规则、逻辑设计、数据库的实施等几个部分。 数据库环境说明中,数据库采用 Micrsoft SQL Server 数据库管理系统建立并维护。数据库设计过程中采用Micrsoft 公司...

    MySQL数据库:逻辑设计.pptx

    MySQL数据库逻辑设计 数据库设计是数据库开发的重要步骤之一,它涉及到数据库的逻辑结构和物理结构的设计。逻辑设计是数据库设计的重要组成部分,它主要涉及到数据库的概念结构和逻辑结构的设计。在本节中,我们...

    数据库E-R图,逻辑结构设计

    本话题将深入探讨“数据库E-R图”以及“逻辑结构设计”,这是构建高效、稳健数据库的基础。 首先,让我们来理解“概念结构设计”。在这个阶段,数据库的设计师需要从用户的角度出发,了解业务需求,抽象出数据实体...

    后台数据库设计 后台数据库设计 后台数据库设计

    12. 在逻辑模型设计中,需要将学生信息实体转化为sinfo表,包括sid、sname、scounty、sintime、sbirtyday、ssex、sremarks等列名。 13. 在物理模型设计中,需要使用SQL语句来创建sinfo表,包括定义列名、数据类型、...

    Oracle数据库设计文档——帮助数据库初学者了解数据库设计

    首先,我们需要理解数据库设计的四个主要阶段:需求分析、概念设计、逻辑设计和物理设计。在需求分析阶段,我们要明确业务需求,收集和整理数据,确定数据实体及其关系。这通常通过创建数据流图(DFD)和实体关系图...

    数据库设计开发规范-阿里.pdf.zip

    数据库设计与开发规范是软件开发过程中的重要环节,特别是在大型企业如阿里巴巴这样的环境中,严谨的数据库设计规范能够确保系统的高效、稳定和可扩展性。以下是对"数据库设计开发规范-阿里.pdf.zip"文件内容的详细...

    数据库设计教案自制

    逻辑设计阶段,会涉及数据类型的选取、主键和外键的设计,以及表的规范化处理,防止数据冗余和不一致。物理设计则需要考虑存储、索引、分区等优化手段,以提高数据库的查询速度和整体性能。 个人总结经验部分,可能...

    数据库详细设计

    数据表的设计包括字段设计、主键设计、索引设计和关系设计等方面。 在数据表设计中,我们需要确定数据表的结构、字段类型、主键、索引和关系等。 数据库性能优化 数据库性能优化是指对数据库的查询优化、索引优化...

    数据库设计文档 --软件开发中数据库设计

    数据库设计是软件开发过程中的关键环节,它直接影响到系统的性能、稳定性和可扩展性。一个良好的数据库设计文档能够清晰地阐述系统数据结构、业务规则以及数据间的关联,从而为开发团队提供准确的指导。以下是对...

    数据库设计之详细设计

    3. **数据库逻辑结构设计**:概念模型转换为逻辑模型,确定具体的数据表结构,包括字段、数据类型、主键、外键等。例如,"部门信息表"(t_dept)包含部门编号(dept_id)、部门名称(dept_name)和经理编号(jingli_...

    工人信息管理系统的数据库设计报告

    在数据库设计中,我们首先要明确系统的需求,然后进行概念模型设计,接着是逻辑结构设计,最后是物理结构设计。在这个过程中,我们需要考虑数据的完整性、安全性以及性能优化等多个方面。 一、需求分析 在设计...

    数据库设计-模板.docx

    《数据库设计》手册 在IT领域,数据库设计是构建高效、稳定、安全的信息系统的基石。这份文档旨在为读者提供一个全面的数据库设计指南,涵盖了从前期规划到具体实施的各个环节。文档的目标是帮助读者理解数据库设计...

    数据库设计原则14法则

    数据库设计是IT领域中至关重要的一个环节,它直接影响着系统的性能、可维护性和数据的一致性。以下是关于“数据库设计原则14法则”的详细解析: 1. 原始单据与实体之间的关系:数据库设计时,需要考虑原始数据源...

    自己动手设计数据库.[美]Michael J.Hernandez(带详细书签) PDF 下载 高清 完整版

    第二,作者高度重视数据库的逻辑设计,严格区分逻辑设计和实现阶段,以确保高效、成功地设计良好的数据库。 《自己动手设计数据库》适合数据库初学者、有经验的数据库开发人员,以及所有对数据库设计感兴趣的读者...

    数据库设计实例,整理过.pdf

    本文档将详细介绍数据库设计实例的知识点,从需求分析到数据库逻辑结构设计,最后到 SQL 代码设计。通过本文档,我们将了解数据库设计的整个过程,并掌握数据库设计的重要知识点。 一、需求分析 需求分析是数据库...

Global site tag (gtag.js) - Google Analytics