基础数据和业务数据的主键
基础数据的主键可以是业务主键,
业务数据的主键建议是逻辑主键.
在数据库设计中我们经常会存在是否为表建立逻辑主键(代理主键)的问题。
使用逻辑主键的好处:
1.业务系统中需要关联时使用逻辑ID进行关联--而不是有业务ID做关联--使业务系统具有最大的灵活性,及业务ID也是可以修改的,如果使用业务ID做主键,则该条记录就不能被修改。但是这种情况时有发生。
例如:现在客户所有产品编号要升级在原来基础上加上分公司编号。如果系统采用逻辑ID关联则可以方便的修改产品编号。否则的话
2.优化了表的设计,避免使用联合主键。
3.进行多表查询时可以通过关联逻辑ID来提升性能.
4.逻辑ID一般采用整形,业务ID通常使用字符类型。整形相对与字符类型无论在建立索引还是外键关联查询效率要高的多。
5.使用Hibernate等ORM工具时,获得一些性能提升。(这也是Hibernate所推荐的)
6.至于业务ID的唯一性约束可以通过唯一性索引来约束
下面引用论坛上的一些片段:
引用
在对象建模时也有逻辑主键,只是隐含了而已。一个逻辑主键的意思就是对象实例的唯一性,简单地说,人的身份证号码是业务主键,而具体的人则隐含着一个逻辑主键,也就是说不管出现什么样的情况,你还是你(当然不要跟我讲克隆, )。
在做建模的时候我们当然不会考虑这个问题,因为它和实例有关系,和对象(指的是建模层的对象,不是类的实例)是没有关系的,所以在做建模时是不会考虑的。这也就是我们为什么叫它逻辑主键的意思(表明它在现实领域是看不到,但是是逻辑存在的)。
再将上面的例子反应到计算机领域,如果拿业务主键身份证作为人的唯一判断,那么就出现了一个问题,所有引用改身份证的地方,如果出现了身份证的改动(客观存在,谁的身份证都升了位),那么将带来很大的麻烦(这种麻烦在现实领域好处理,并且有足够的时间进行处理,但是在计算机领域就不简单了)。
我的建议:对于业务数据,是需要采用逻辑主键的,对于基础数据,基于多方面考虑,是可以采用业务主键的。
引用
逻辑主键的作用只是关联引用,没有任何别的作用,而在表内的唯一性是通过业务唯一性(建立唯一约束)来保证的。
我是提倡业务数据采用逻辑主键,基础数据可以根据实际情况采用业务主键的(这里所谓的业务主键并不是业务数据,而是所称的比如国家,货币,城市代码等等之类)。
我从来不是那种走极端的,因为如果一味全部用逻辑主键,在处理复杂业务的时候,就真的很麻烦了,因为一张业务表往往关联更多的基础表。但是,在业务表里也用所谓的业务主键,那就更差了(基础的东西往往很少改,即算要改,都是有比较长的时间量,并且都是为大家所共知的;而业务的东西,是每一个做软件的最薄弱的,并且是最有可能受到客户影响的,也会是最会引起问题的)。
引用
只要是由用户维护的数据,信息系统就不能假设它不会变。很简单,用户维护的时候会出错。出错了就要改。逻辑主键应该是指没有业务含义,没有业务用途,因此不需要用户维护,甚至不需要给用户看的。因此它也就绝对不会变。这才能真正满足主键“唯一,不变”的要求。
引用
业务主键一般不会是单独的一个字段,那么,在这种主从关系中,是很痛苦的
尤其是我们做的ERP系统,经常会有多层的级联 H-MD-MD这样的结构,如果使用业务主键,简直是不可想象的
所以,基本上都是UUID作为主键
最后,如何在运行效率,开发效率以及维护上找个平衡点是关键!!!
分享到:
相关推荐
数据库主键设计的五种方法 数据库主键设计是数据库设计中一个非常重要的环节,好的主键设计可以提高数据库的性能和可扩展性。本文将介绍五种常见的主键设计方法,每种方法都有其优点和缺陷。 第一种:编号作主键 ...
### 数据库主键设计原则详解 #### 一、引言 在数据库设计中,主键的设计至关重要,它不仅关系到数据的唯一性,还影响着数据检索效率以及系统的整体性能。本文将根据提供的描述和部分内文,深入探讨数据库主键设计...
数据库主键和外键设计的原则
MySQL数据库主键重复原因分析及处理.pdf MySQL数据库主键是数据库管理系统中的一种重要概念,它是指在关系型数据库中,每个表的唯一标识符,用于唯一地标识表中的每一条记录。主键是数据库设计的核心概念,关系型...
数据库主键设计之思考 在数据库设计中,主键的设计是非常重要的。主键的存在代表着表结构的完整性,表的记录必须得有唯一区分的字段,主键主要是用于其他表的外键关联,本记录的修改与删除。当我们没有主键时,这些...
数据库主键是数据库设计中的核心概念,它是表中一列或多列的组合,用于唯一地标识每一行数据,确保数据的唯一性和完整性。在数据库系统中,主键扮演着至关重要的角色,它不仅用于区分不同记录,还在建立表间关联时...
Oracle 数据库主键自动生成 在 Oracle 数据库中,主键自动生成是指在插入数据时自动生成唯一的主键值,从而简化数据录入和维护工作。下面将详细介绍 Oracle 数据库主键自动生成的实现方法和相关知识点。 序列...
数据库主键生成GUID 在数据库设计中,选择合适的主键类型是非常重要的。GUID(Global Unique Identifier,全局唯一标识符)是一种常用的主键类型,它可以提供唯一的标识符,用于标识数据库中的每一条记录。 GUID的...
SQL Server 数据库主键约束详解 在关系型数据库中,主键(Primary Key)是表中的一个或多个字段,它们的值可以唯一地标识表中的每一行记录。主键约束是数据库中的一种约束,它确保了表中的每一行记录的唯一性。 在...
在Java编程中,数据库主键生成是一个常见的需求,特别是在创建数据表记录时,主键用于唯一标识每条记录。这个示例将展示如何使用Java来动态生成数据库主键,确保其唯一性。以下是对给定代码的详细解释和扩展。 首先...
数据库主键设计原则 或许大家都设计过数据库,也为表定义过主键,今天我想阐述的是,应该如何正确的设计一个主键,在以往的一些资料中,都没有提及到主键设计的原则. 我为此总结了一下: 1.是否要采用GUID作为主键 用GUID...
我们在建立数据库的时候,需要为每张表指定一个主键,所谓主键是能够标识... 常见的数据库主键选取方式有: 自动增长字段 手动增长字段 UniqueIdentifier “COMB(Combine)”类型 一、自动增长型字段
关于数据库主键和外键 终于弄懂啦
数据库完整性详解,十分详细,附有详细上机图以及步骤。
一、创建序列 1.1、直接在PLSQL中设置 1.2、命令创建 create sequence seq_users ##创建序列seq_users increment by 1 ## 步长,每次加1 start with 1 ##从1开始 minvalue 1 ##最小值 maxvalue 9999999 ##最大值 ...
"数据库中表的主键设计原则收藏" 在设计数据库表时,主键的设计是非常重要的一步。一个好的主键设计可以提高数据库的性能和可维护性,而一个糟糕的主键设计可能会带来一系列的问题。本文将讨论数据库中表的主键设计...
数据库主键设计是数据库设计中的核心部分,主键是用来唯一标识一条记录的字段,它确保了数据的唯一性和完整性。本文主要讨论了两种常见的主键设计策略:自增主键和GUID主键。 首先,自增主键是利用数据库系统提供的...
【SQL Server数据库主键选取策略】 在数据库设计中,主键起着至关重要的作用,它确保了数据的唯一性和一致性。主键的选择直接影响到数据更新、删除的准确性和参照完整性的实施。本文主要探讨几种常见的主键选取策略...
在Java的持久化框架Hibernate中,主键策略是管理数据库记录唯一标识的重要组成部分。主键策略定义了如何生成和管理实体对象的主键值。在本篇内容中,我们将深入探讨"Hibernate主键策略-sequence",并结合标签中的...
在Java开发中,有时我们需要动态地获取数据库的元数据信息,比如表结构、主键、外键等。本文将详细介绍如何使用Eclipse和JDBC API来获取MySQL数据库中的表结构以及主外键信息。 #### 一、准备工作 在开始之前,请...