数据设计规范

目录

一、数据库设计的原则

二、表设计原则

三、其他设计规范

四、最佳实践


数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。以下是一些关键的数据库设计规范:

一、数据库设计的原则

  1. 数据独立性:数据与应用程序相互独立,改变数据存储结构或访问方法不影响应用程序。数据独立性分为逻辑数据独立性和物理数据独立性。逻辑数据独立性指数据库的逻辑结构改变不影响应用程序,物理数据独立性指数据在物理存储介质上的变化不影响数据库的逻辑结构。实现数据独立性的方法包括使用抽象层次、数据模型和视图。
  2. 数据完整性:数据的准确性和一致性。它包括实体完整性、参照完整性和域完整性。实体完整性要求每个表中的每一行都必须是唯一的,通常通过主键来实现。参照完整性要求外键值必须在参考表中存在,以确保数据的一致性。域完整性确保每列的数据类型、格式和范围的一致性。实现数据完整性的方法有使用约束(如主键、外键、唯一性约束)、触发器和存储过程。
  3. 数据一致性:多个用户同时访问和修改数据库时,数据保持一致的状态。数据一致性通常通过事务管理来实现。事务是一个逻辑操作单元,包含一个或多个SQL语句,具有原子性、一致性、隔离性和持久性(ACID属性)。
  4. 数据冗余最小化:在数据库设计中尽量减少数据的重复存储。过多的冗余数据不仅浪费存储空间,还容易导致数据的不一致。减少数据冗余的方法有规范化和数据库分区。
  5. 数据安全性:通过身份验证、访问控制和数据加密等方法保护数据的安全性,防止数据泄露和篡改。
  6. 性能优化:提高数据库的访问速度和处理能力。常见的性能优化方法有索引优化、查询优化和存储优化。

二、表设计原则

  1. 规范化与反规范化

    • 规范化:优点是减少了数据冗余,节约了存储空间,相应逻辑和物理的I/O次数减少,同时加快了增、删、改的速度。但是一个完全规范化的设计并不总能生成最优的性能,因为对数据库查询通常需要更多的连接操作,从而影响到查询的速度,而且范式越高性能就会越差。
    • 反规范化:为了提高某些查询或应用的性能,可以破坏规范规则。数据应当按两种类别进行组织,即频繁访问的数据和频繁修改的数据。对于频繁访问但是不频繁修改的数据,内部设计应当物理不规范化。对于频繁修改但并不频繁访问的数据,内部设计应当物理规范化。
  2. 数据表分类

    • 基本数据表:描述业务实体的基本信息,如人员基本信息、单位基本信息等。
    • 标准编码表:描述属性的列表值,如职称、民族、状态等。
    • 业务数据表:记录业务发生的过程和结果,如人员调动登记、变更通知单等。
    • 系统信息表:存放与系统操作、业务控制有关的参数,如用户信息、权限、用户配置信息等。
    • 统计数据表:存放业务数据统计值,如通知单统计、人员类别统计等。
    • 临时处理表:存放业务处理过程中的中间结果。
    • 其他类型表:存放应用层的日志、消息记录等。
  3. 字段设计

    • 应该使用能正确存储和表示数据的最小类型。如果不确定需要什么数据类型,则选择不会超出范围的最小类型。
    • 选择更简单的数据类型,例如比较整数的代价小于比较字符,因为字符集和排序规则使字符比较更复杂。
    • 尽可能把字段定义为NOT NULL。对于字段能否为NULL,应该在SQL建表脚本中明确指明,不应使用缺省。
    • 一个表中的字段不要太多,理论上不要超过80个。
    • 数据库中所有布尔型中数值0表示为假,数值1表示为真。
    • 当字段定义为字符串类型时使用VARCHAR2而不用NVARCHAR。
    • 字段尽可能有默认值,字符型的默认值为一个空字符值串,数字型的默认值为数值0。
  4. 键和索引设计

    • 为关联字段创建外键。
    • 所有的键都必须唯一。
    • 尽可能避免使用复合键。
    • 外键总是关联唯一的键字段。
    • 尽可能使用系统生成(如序列SEQUENCE产生)的主键。
    • 可选键有时可做主键。
    • 一个表中组合主键的字段个数尽可能少。
    • 如果一列出现在表达式或函数中,不会使用该列上的索引。
    • 要索引外键。
    • 对于索引选择性高的列使用B-Tree索引。
    • 对于索引选择性低的列使用位图索引。
    • HASH索引只适用于相等比较。
    • 不要索引大型字段(有很多字符的字段)。
    • 不要索引常用的小型表。如无特别需要,避免使用大字段(BLOB、CLOB、LONG等)。如使用时必须使用BLOB或CLOB类型。

三、其他设计规范

  1. 采用数据库系统实现数据的完整性:这不但包括通过标准化实现的完整性,而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于应用程序保证数据完整性,它不能保证表之间(外键)的完整性。每个表要求有主键,主键字段或组合字段必须满足非空属性和唯一性要求。

  2. 视图设计:为了在数据库和应用程序之间提供另一层抽象,可以为应用程序建立专门的视图而不必非要应用程序直接访问表。这样做还在处理数据库变更时提供了更多的自由。

    • 为简化查询,将复杂的检索或子查询通过视图实现。
    • 提高数据的安全性,只将需要查看的数据信息显示给权限有限的人员。
    • 视图中如果嵌套使用视图,级数不要超过3级。
    • 对于数据量较大或随时间的推移逐渐增多的表,不宜使用视图,可以采用实体化视图代替。
    • 除特殊需要,避免类似“SELECT * FROM [TableName]”而没有检索条件的视图。
    • 视图中尽量避免出现数据排序的SQL语句。
  3. 命名规范

    • 所有命名采用26个英文大小写字母和0~9这十个自然数,加上下划线_组成,不能出现其他字符(注释除外)。
    • 长度不超过30个字符。
    • 实际名字尽量描述实体的内容,由英文单词、单词组合或单词缩写组成,不以数字和_开头。
    • 命名中禁止使用SQL关键字。
    • 对象名尽量短。表以单数形式名词或名词短语命名。如果表名仅有一个单词,那么建议不使用缩写,而是用完整的单词。数据表t_inf_<系统标识>_<表标识>,编码表t_cod_<系统标识>_<表标识>,系统表t_sys_<系统标识>_<表标识>,统计表t_sta_<系统标识>_<表标识>,临时表t_tmp_<系统标识>_<表标识>,日志表t_log_<系统标识>_<表标识>。
    • 采用有意义的字段名,应该是易于理解、能表达字段功能的英文单词或单词缩写,一般不超过三个英文单词。
    • 系统中所有属于内码的字段(仅用于表示唯一性和程序内部用到的标识性字段),名称取为ID。
    • 系统中属于业务范围内的编号的字段,其代表一定的业务信息,这样的字段建议命名为CODE,其数据类型为VARCHAR,该字段需加唯一索引。
    • 不要在列的名称中包含数据类型。主键PK_<表名>,外键FK_<表名>_<主表名>_<外键字段名>。如果复合索引的构成字段较多,则只包含第一个字段,并添加序号。视图V_<系统标识>_<视图标识>,存储过程SP_<系统标识>_<存储过程标识>,函数F_<系统标识>_<函数标识>,触发器TR_<表名>_<i、u、d的任意组合>,用户定义数据类型UD_<自定义数据类型标识>,序列SEQ_<序列标识>,局部变量L_<变量标识>,全局变量G_<变量标识>,游标变量L_CUR_<变量标识>或G_CUR_<变量标识>,存储过程或函数定义中的参数(IN型参数P_<参数标识>,OUT型参数R_<参数标识>,函数返回值R_<变量标识>)。
  4. 安全性设计:在生产环境中,必须严格管理SYS和SYSTEM用户,必须修改其默认密码,禁止用该用户建立应用数据库对象。删除或锁定SCOTT等默认安装但不使用的用户。

四、最佳实践

  1. 考量所有相关利益者:在构建数据库之前,先去收集信息,了解他们对数据库的期望以及对数据库的操作熟练度。这样就能得出数据库应当采用的技术水平,以及是否要就数据库的功能来训练用户。
  2. 选择正确的数据库类型:数据库有多种类型,选择正确类型则是数据库设计的关键。可以将数据库以两种方式分类,一是基于数据库用以定义和操作数据的查询语言,二是基于数据模型。研究数据库的不同类型,并针对应用需求作出选择,是必要的初始步骤。
  3. 文档化:文档化对于良好的数据库设计至关重要,可以追踪所有的小细节。数据库设计应当附有指示说明、ER图、存储过程及所有其他相关的信息。文档还应当为编程者和终端用户提供足够信息量,确保他们能够理解并使用。
  4. 考虑隐私和安全性:为了获得最大程度的安全性,应当对密码加密,使用身份验证来限制数据库的访问,

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10、win11-鼠标右键还原、暂停更新

系统优化 win 10jihuo win 11jihuo鼠标右键还原暂停更新 update 2024.12.28win 10 jihuo winx&#xff0c;打开powershell管理员&#xff0c;输入以下命令,选择1并等待 irm https://get.activated.win | iex参考&#xff1a;https://www.bilibili.com/video/BV1TN411M72J/?sp…

【蓝桥杯选拔赛真题87】python输出字符串 第十五届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python输出字符串 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python输出字符串 第十五届蓝桥杯青少年组python比赛选拔赛真题详细解析…

有什么AI辅助阅读文献工具推荐?

AI的发展速度非常快&#xff0c;在很多方面都已经可以提供货真价实的辅助能力。 比如AI辅助阅读方面&#xff0c;可以获取、分析和理解大量文献资料。这可以帮助我们快速浏览和理解PDF文件和其他文档&#xff0c;提高我们的工作效率和学习效率&#xff0c;达到降本增效。 作为…

各个Spring Cloud版本有何主要差异

Spring Cloud 的各个版本之间确实存在一些关键差异&#xff0c;这些差异主要体现在功能更新、性能优化、对新技术的支持以及对旧有技术的替代等方面。 1. Spring Cloud Dalston 这是 Spring Cloud 的一个早期版本&#xff0c;它提供了微服务架构所需的基本组件&#xff0c;如服…

【翻译】审慎对齐:推理使更安全的语言模型成为可能

原文&#xff1a;https://arxiv.org/abs/2412.16339 出自OpenAI 摘要 随着大规模语言模型对安全关键领域的影响越来越大&#xff0c;确保它们可靠地遵守定义良好的原则仍然是一个基本挑战。本文提出慎思校准&#xff0c;一种新的范式&#xff0c;直接教模型安全规范&#xff…

1、ELK的架构和安装

ELK简介 elk&#xff1a;elasticsearch logstash kibana&#xff0c;统一日志收集系统。 elasticsearch&#xff1a;分布式的全文索引引擎的非关系数据库&#xff0c;json格式&#xff0c;在elk中存储所有的日志信息&#xff0c;架构有主和从&#xff0c;最少需要2台。 …

使用连字符容易出错,尽量使用驼峰式的

在<Select>组件中&#xff0c;存在一个拼写错误。在option - value属性中&#xff0c;正确的写法应该是option - value&#xff08;使用连字符&#xff09;或者optionValue&#xff08;如果是按照Vue组件属性的驼峰命名法&#xff09;&#xff0c;这里写成了option - val…

CentOS7 解决ping:www.baidu.com 未知的名称或服务

CentOS7 解决ping&#xff1a;www.baidu.com“未知的名称或服务 在VM查看网络配置 查看虚拟网络编辑器 编辑网络配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33注意&#xff1a;不同机器的配置文件名可能不相同&#xff0c;通过 ip addr 命令查看 将 ONBOOT 从 no 改…

QT----------文件系统操作和文件读写

一、输入输出设备类 功能&#xff1a; Qt 提供了一系列的输入输出设备类&#xff0c;用于处理不同类型的 I/O 操作&#xff0c;如文件、网络等。 二、文件读写操作类 QFile 类&#xff1a; 提供了对文件的读写操作&#xff0c;可以打开、读取、写入和关闭文件。示例&#x…

Android14 CTS-R6和GTS-12-R2不能同时测试的解决方法

背景 Android14 CTS r6和GTS 12-r1之后&#xff0c;tf-console默认会带起OLC Server&#xff0c;看起来olc server可能是想适配ATS(android-test-station)&#xff0c;一种网页版可视化、可配置的跑XTS的方式。这种网页版ATS对测试人员是比较友好的&#xff0c;网页上简单配置下…

2024-12-29-sklearn学习(26)模型选择与评估-交叉验证:评估估算器的表现 今夜偏知春气暖,虫声新透绿窗纱。

文章目录 sklearn学习(26) 模型选择与评估-交叉验证&#xff1a;评估估算器的表现26.1 计算交叉验证的指标26.1.1 cross_validate 函数和多度量评估26.1.2 通过交叉验证获取预测 26.2 交叉验证迭代器26.2.1 交叉验证迭代器–循环遍历数据26.2.1.1 K 折26.2.1.2 重复 K-折交叉验…

免费容器镜像服务--统信容器镜像平台

原文链接&#xff1a;免费容器镜像服务--统信容器镜像平台 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于 免费容器镜像服务——统信容器镜像平台 的文章。统信容器镜像平台是由统信软件推出的免费容器镜像服务&#xff0c;遵循 OCI&#xff08;Open Containe…

Vue 3.0 中 template 多个根元素警告问题

在 Vue 2.0 中&#xff0c;template 只允许存在一个根元素&#xff0c;但是这种情况在 Vue 3.0 里发生了一些变化。 在 Vue 3.0 中开始支持 template 存在多个根元素了。但是因为 VSCode 中的一些插件没有及时更新&#xff0c;所以当你在 template 中写入多个根元素时&#xf…

基于JavaWeb的汽车维修保养智能预约系统

作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验&#xff0c;被多个学校常年聘为校外企业导师&#xff0c;指导学生毕业设计并参与学生毕业答辩指导&#xff0c;…

Kafka 幂等性与事务

文章目录 幂等性实现机制配置使用局限性 事务使用场景配置使用实现机制事务过程事务初始化事务开始事务提交事务取消事务消费 幂等性 Producer 无论向 Broker 发送多少次重复的数据&#xff0c;Broker 端只会持久化一条&#xff0c;保证数据不丢失且不重复。 实现机制 通过引…

ActiveMQ支持哪些传输协议

ActiveMQ 支持多种传输协议&#xff0c;以满足不同场景下的需求。这些协议包括但不限于以下几种&#xff1a; 1. OpenWire&#xff1a; • 这是 ActiveMQ 的默认和专有协议。 • 提供了高效、可靠的消息传递功能。 • 支持多种消息传递模式&#xff0c;如点对点和发布/订阅。 2…

MySQL数据库——常见慢查询优化方式

本文详细介绍MySQL的慢查询相关概念&#xff0c;分析步骤及其优化方案等。 文章目录 什么是慢查询日志&#xff1f;慢查询日志的相关参数如何启用慢查询日志&#xff1f;方式一&#xff1a;修改配置文件方式二&#xff1a;通过命令动态启用 分析慢查询日志方式一&#xff1a;直…

Qt天气预报系统设计界面布局第四部分左边

Qt天气预报系统设计 1、第四部分左边的第一部分1.1添加控件1.2修改控件名字 2、第四部分左边的第二部分2.1添加控件2.2修改控件名字 3、第四部分左边的第三部分3.1添加控件3.2修改控件名字 4、对整个widget04l调整 1、第四部分左边的第一部分 1.1添加控件 拖入一个widget&…

【嵌入式硬件】嵌入式显示屏接口

数字显示串行接口&#xff08;Digital Display Serial Interface&#xff09; SPI 不过多赘述。 I2C-bus interface 不过多赘述 MIPI DSI MIPI (Mobile Industry Processor Interface) Alliance, DSI (Display Serial Interface) 一般用于移动设备&#xff0c;下面是接口…