数据库设计的 10 个最佳实践


作者 | Emily Williamson

译者 | 孙薇,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

数据库是应用及计算机的核心元素,负责存储运行软件应用所需的一切重要数据。为了保障应用正常运行,总有一个甚至多个数据库在默默运作。我们可以把数据库视为信息仓库,以结构化的方式存储了大量的相关信息,并合理分类,方便搜索及使用。

因此,数据库设计成为软件开发中的重要一环,对于开发者来说,设计一个高效的数据库至关重要。那么,为什么数据库设计很重要,“好”的标准又是什么?本文将做以介绍。

为什么数据库设计很重要?

用我们订购衬衫的在线商城网站举例。如今,从网站上订购衬衫的过程似乎很简单,但涉及了很多信息交换。例如:第一次浏览网页时,系统会展示给你一系列信息,包含产品分类,所有可用商品、相应价格、可用尺码、颜色以及其他相关信息。网站会从存储数据的数据库中检索,当用户选中所需商品并继续操作购买时,网站会询问个人详细信息、送货地址、付款详细信息,并确认订单。目前在此过程中产生的新数据,如用户详细信息、订单详细信息、购买及付款都会在同一个数据库中添加及更新。

数据库设计很重要,因为对构建可伸缩且能够在高工作负载下运行的软件应用来说,它是至关重要的。设计数据库首先来说,选择数据库软件很关键。目前可用于构建应用的数据库软件有数百种可供选择,我们可以从一些最好的免费数据库软件中选择,之后便是设计符合要求的数据库了。下面列出了10个最优的数据库设计实践。

数据库设计的10个最佳实践

将所有人的观点列入考量

要设计好的数据库,必须考虑所有相关利益者的观点。在构建数据库之前,先去收集信息,了解他们对数据库的期望以及对数据库的操作熟练度。这样就能得出数据库应当采用的技术水平,以及是否要就数据库的功能来训练用户。

选择符合需求的数据库类型

数据库有多种类型,选择正确类型则是数据库设计的关键。我们可以将数据库以两种方式分类。一是基于数据库用以定义和操作数据的查询语言。使用SQL的数据库是结构化数据最常用的类型。然而,由于NoSQL数据库的可伸缩性、灵活性和速度更优,它们更适合机器学习、网络分析以及物联网(IoT)使用。

第二种分类方式则是基于数据模型。这样分类会有四种类型:关系数据库、分层数据库、网络数据库以及面向对象的数据库。

研究数据库的不同类型,并针对应用需求作出选择,这是必要的初始步骤。

以一致的方式来定义与标记表和列

在定义数据项以及标记表与列时,遵从一致性原则非常重要,可以帮助我们更好地理解数据。命名表与列的最佳实践之一便是使用简单的名字来定义其包含的数据。比如:只需将包含用户名称的列标记为“CustomerName”(“用户名”)即可。

应当避免使用复数名(如CustomerNames)、缩写(如CN),并且名称中不得使用空格(如Customer Name)。如果坚持遵守这些规则,则将来的用户在使用数据库时会更容易。

规范化是关键

数据库的规范化指的是将数据库中的所有信息组织起来,避免数据重复和冗余。简单来说,规范化是将数据打散分配到多个较小的相关表中,而不是统统存在一个大表里。

将数据规范化是很好的数据库设计实践,有助于提高效率。但是请确保不要过度规范化,否则将会把数据分散到太多的小表中,反而造成混乱。

数据库设计的文档化很重要

事实上,文档化并非人见人爱,因为实在太烦了。但要记得,文档化对于良好的数据库设计至关重要,可以追踪所有的小细节。数据库设计应当附有指示说明、ER图、存储过程及所有其他相关的信息。文档还应当为编程者和终端用户提供足够信息量,确保他们能够理解并使用。

隐私是首要考量

很多时候,存储在数据库中的信息是加密信息,隐私就成了一个值得关注的问题。为了获得最大程度的安全性,我们应当对密码加密,使用身份验证来限制数据库的访问,并使用另一个服务器来存放数据库,而不是应用所在的服务器。这将确保你的数据不受攻击和隐私侵犯的威胁。

考虑长期需求

优秀的数据库设计应当具备可伸缩性,即:在使用量增加的情况下,仍然能承受较高的工作负载,并保障应用的运行。对工作量可能会有所改变的企业来说,在设计数据库时牢记此项至关重要。例如:如果一个电子商务网站预计当销售量增长时,访客会在一个月内急速增加,那么在设计数据库时应当将这一点列入考量,以便数据库可以响应迅速增长的访客,并保持在高工作负载的情况下运作。

代码以及使用预存程序

数据库设计中的常见错误之一,就是不使用预存程序。预存程序指的是,在操作数据时手边随时可用的提前预存代码串。例如,如果有个SQL查询是常用的操作指令,则将它提前写入预存程序,而不是在用的时候重新来写,就会让工作简单起来。一旦有了预存程序,就可以在需要时一步执行并载入这个SQL查询了。

编写大量预存程序是个吃力的工作,但如果花时间完成并用文档记录下来的话,对终端用户来说,使用数据库就更加轻松了。

在数据库建模和设计上投入时间

优秀数据库设计的专业技巧之一是在数据库建模和设计上投入时间和精力。开发者常见的错误就是忽略这一步以节省时间,将重点放在软件开发更重要的其他方面上。但是,数据库设计对于保障应用的功能来说非常关键。如果一味想节省时间,不仔细思考设计的话,未来就会需要花费更多时间来维护数据库,甚至重新设计。

测试设计

测试也是数据库设计很关键的步骤,而且经常会被疏忽对待,甚至完全跳过,只为了赶DDL。我们应当在发布项目前,花些时间来彻底测试数据库设计,以确保其满足了所有计划中的需求,且正常运行。

结语

对于以数据为中心的项目来说,数据库设计极为重要,开发过程中我们也应当慎重对待。文中提到的数据库设计实践,如针对长期需求进行适当的计划,选择正确的数据库类型,使用一致性的名称与标签,数据规范化,数据库设计文档化,并提前测试,这些都是我们在设计优秀数据库时需要考虑的关键问题。

原文:https://medium.com/quick-code/10-best-database-design-practices-1f10f3441730

本文为 CSDN 翻译,转载请注明来源出处。

「AI大师课」是CSDN发起的“百万人学AI”倡议下的重要组成部分,4月份AI大师课以线上技术峰会的形式推出,来自微软、硅谷TigerGraph、北邮等产学界大咖就图计算+机器学习,语音技术、新基建+AI、AI+医疗等主题展开分享,扫描下方二维码免费报名,限时再送299元「2020AI开发者万人大会」门票一张。

推荐阅读:Spark3.0发布了,代码拉过来,打个包,跑起来!| 附源码编译
跟面试官侃半小时MySQL事务隔离性,从基本概念深入到实现
技术大佬的肺腑之言:“不要为了 AI 而 AI”! | 刷新 CTO
无代码时代来临,程序员如何保住饭碗?
154 万 AI 开发者用数据告诉你,中国 AI 如何才能弯道超车?| 中国 AI 应用开发者报告
业内最大的“空气币”——以太坊???
真香,朕在看了!

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

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

相关文章

从未如此简单:10分钟带你逆袭Kafka!

来源 | 51CTO 技术栈作者 | 故事凌封图| CSDN下载于视觉中国Apache Kafka 是一个快速、可扩展的、高吞吐的、可容错的分布式“发布-订阅”消息系统, 使用 Scala 与 Java 语言编写,能够将消息从一个端点传递到另一个端点。较之传统的消息中间件&#xff0…

GMTC2019|闲鱼-基于Flutter的架构演进与创新

2012年应届毕业加入阿里巴巴,主导了闲鱼基于Flutter的新混合架构,同时推进了Flutter在闲鱼各业务线的落地。未来将持续关注终端技术的演变及趋势 Flutter的优势与挑战 Flutter是Google开源的跨端便携UI工具包,除了具有非常优秀的跨端渲染一致…

别吹了!Python程序员正在消失! 资深CTO:你才发现?

程序员你有没有感觉到,Python最近已经刷屏到爆炸了?细分析Python之所以刷屏,主要是因为人红是非多,在编程界它是一种特殊的存在,有人认为,只有用Python才能优雅写代码,提高代码效率;…

Tableau BI工具对接 AnalyticDB for PostgreSQL数据源

AnalyticDB for PostgreSQL(原HybridDB for PostgreSQL)作为高性能分析型数据库,可以支持用户对其业务数据进行实时分析,能够让企业敏锐感知市场动态,做出必要决策。 Tableau是一款数据分析与可视化工具,它…

蚂蚁区块链BaaS:开放在云端,落地于实体

自 2018 年 6 月上线以来,蚂蚁区块链 BaaS 不断在技术上实现突破,形成自身独特的优势,并做为行业领军者在不同领域的几十个场景实现落地。在区块链的商用时代加速到来之际,通过开放自身的技术体系,与国内外各合作伙伴一…

大麦云原生边缘计算探索,让观众剧院看戏也能实现个性化

作者 | 阿里文娱技术专家 草薰责编 | 夕颜出品 | CSDN(ID:CSDNnews)背景近年来,我国文化产业蓬勃发展,文化产业价值年均增速远高于同期 GDP 增速,尽管中 国演出市场在开放竞争中逐步规范有序,但目前仍处于…

Linus 本尊来了!为什么 KubeCon 越来越火?

阿里妹导读: 从200人的小会议到3500 多位云原生和开源领域工程师齐聚一堂的大会,KubeCon 只用了四年,昨天,在KubeCon China 2019 上阿里巴巴宣布开源 OpenKruise,今天,Linus 本尊竟然现身会场! …

MaxCompute 费用暴涨之新增SQL分区裁剪失败

现象:因业务需求新增了SQL任务,这SQL扫描的表为分区表,且SQL条件里表只指定了一个分区,按指定的分区来看数据量并不大,但是SQL的费用非常高。费用比预想的结果相差几倍甚至10倍以上。 分析:我们先明确MaxC…

Java-static关键字

对于属性和方法 public class Student {private static int age; // 静态的变量 共享这一个数据 多线程用的多private double score; // 非静态的变量public void run(){go();}public static void go(){}public static void main(String[] args) {Student s1 new Student();…

肯耐珂萨助力世界500强零售企业在线春招:单次面试3000人

“今年874万应届毕业生太难了”,据官方统计数据显示,毕业生人数比2019年还要多40万,这已经是继2008年之后连续12年的人数上涨。加之春招不赶巧,撞上了新冠肺炎疫情,不出意外的又是一次“不容易的毕业季”。 往年各高校…

Flutter for Web 详细预研

背景 Google在最新的Google I/O上推出了Flutter for Web,旨在进一步解决一次代码,多端运行的问题。Flutter for Web还处于早期试验版,官方不建议在生产环境上使用。那么到底它的实际情况怎么样呢? 我们做了一次预研。期望这次预研…

坚持探索与落地并重,阿里巴巴云原生之路全景揭秘

阿里妹导读:阿里云已经成功地规模化落地云原生,26日的 KubeCon 大会上,CNCF TOC 和阿里云资深技术专家李响发表主题演讲,分享了阿里巴巴在规模扩展、可靠性、开发效率、迁移策略等方面的经验,并探讨云原生的落地及应对…

Java-抽象类

// abstract 抽象类 // 类是 单继承, 接口是 多继承 public abstract class Action {// 约束~ 有人帮我们实现// abstract, 抽象方法,只有方法名字,没有方法的实现public abstract void doSomething();/*1. 不能 new 这个抽象类&#xff0c…

在Kubernetes上部署一个简单的、类PaaS的平台,原来这么容易!

作者 | Bram Dingelstad译者 | 弯月 责编 |徐威龙封图| CSDN下载于视觉中国我们都遇到过这种情况:有人发现了一个bug,然而这不是一般的软件bug,甚至都不是通常意义上的bug,其本质上是人员的问题:盲目跟风的开发者。一开…

对话阿里敏捷教练 | 成功辅导过淘宝、闲鱼,他都是如何帮助团队

为了让大家对敏捷有更多的了解,小编特意采访了阿里巴巴高级技术专家、敏捷教练张燎原。他是如何看待敏捷、如何帮助团队落地敏捷的,作为研发团队的一员,我们可以从哪些地方着手敏捷,以下是对他的采访。 嘉宾简介:张燎原…

用Flink取代Spark Streaming!知乎实时数仓架构演进

作者 | 知乎数据工程团队 “数据智能” (Data Intelligence) 有一个必须且基础的环节,就是数据仓库的建设,同时,数据仓库也是公司数据发展到一定规模后必然会提供的一种基础服务。从智能商业的角度来讲,数据的结果代表了用户的反…

Java-接口的定义与实现

// 接口都需要有实现类 public interface UserService {// 常量 默认是 public static final,一般不会再接口定义常量int AGE 99;// 接口中的所有定义的方法其实都是抽象的 public abstract // public abstract void run();void add(String name);void delete(S…

4 年 46 个版本,一文读懂 Spring Cloud 发展历史

作者 | 方剑责编 | 唐小引头图 | CSDN 下载自东方 IC出品 | CSDN(ID:CSDNnews)Spring Cloud 自 2016 年 1 月发布第一个 Angel.SR5 版本,到目前 2020 年 3 月发布 Hoxton.SR3 版本,已经历经了 4 年时间。这 4 年时间里…

让开发部署提速 8 倍,我参与贡献这款 IDE 插件的全过程

如何像参与开源那样,去参与一款 IDE 插件的设计? 作为一款 IDE 插件的使用者,我是否能决定下一个版本的功能? 自从产品经理银时小伙和他的开发小哥们在去年12月发布 Cloud Toolkit(一款 IDE 插件)以来&am…

这难道是原子、比特and供应链的新内涵?京东如是说……

本文为CSDN博主「L-JingJing」的原创文章 原文链接:https://blog.csdn.net/sch881226/article/details/105301572 从遍览采茶风光到感受入口醇香,如今我们真的可以做到高效追溯每一片茶叶的“记忆”了吗?答案显然是肯定的,据了解…