专栏首页程序你好数据库设计的最佳实践

数据库设计的最佳实践

在当今世界,在开始设计数据库之前,除了关系数据库之外,我们还需要考虑非关系(nosql)数据库。40多年来,SQL(结构化查询语言)数据库一直是主要的数据存储机制。

尽管NoSQL自20世纪60年代以来就已经有了,近年来如MongoDB、Cassandra、Redis等NoSQL数据越来越受欢迎。

无论SQL或NoSQL的主要目标是存储数据,只是它们在存储、检索等方法上有所不同。

此外,终端用户通常对组合数据的报告信息感兴趣,而不是对单独的数据项感兴趣。根据项目的需要,我们可以选择使用SQL或NoSQL。我们还应该记住,一个不是一个替代另一个,有时候它只是一个合适选择而已。

让我们看看一些设计数据库的最佳实践,以及在数据库设计过程中需要考虑的所有内容。

需要存储哪些信息(数据)?

这一步是为了确定需要存储哪些数据。在这里,我们需要一个领域专家和一个数据库专家。

这需要数据库设计人员具备从具有领域知识的人员中获取所需信息的技能。这是因为那些拥有必要领域知识的人经常不能清楚地表达他们对数据库的系统需求,因为他们不习惯考虑必须存储的离散数据元素。

我们为什么要储存这些?

有必要知道为什么我们需要存储这些数据。谁会用这些,他们是谁?

我们需要执行什么样的查询?

我们如何使用这些数据?

数据的关系:

一旦设计人员确定到要存储在数据库中的数据,他们也就必须确定数据中依赖的数据。

结构化数据:

一旦确定了各种信息块之间的关系和依赖关系,就可以将数据安排到逻辑结构中,然后将其映射到数据库管理系统支持的存储对象中。

上面提到的这些点对于任何类型的数据库都是有效的,但是我们需要根据数据库类型(关系或非关系)考虑一些重要的步骤。

关系数据库:

  • 识实体:实体是系统中的对象,我们希望对其建模并存储信息。
  • 标识实体属性:属性是实体的特征。
  • 识别属性类型:属性的数据类型,如char、date、number等。
  • 标识实体之间的关系:关系是两个数据库表之间存在的一种情况。关系允许数据库在连接不同的数据项时分割和存储不同表中的数据。
  • 分配键(主键、外键):键用于识别表中唯一的行。它还建立了表之间的关系。
  • 标识约束需要应用到实体或列上:约束对表中的数据执行角色。
  • 规范化:规范化是在数据库中组织数据的过程。它通过消除冗余和不一致的依赖性使数据库更加灵活。

非关系数据库(NoSQL)

  • NoSQL数据建模通常由特定于应用程序的访问模式驱动,即要支持的查询类型。
  • 这种数据建模通常需要对数据结构和算法有更深入的理解。
  • 在设计NoSql时,数据复制和非规范化是两个关键方面。

非规范化:

将相同的数据复制到多个文档或表中,以便简化或优化查询处理,或将用户的数据适合于特定的数据模型。它允许我们以查询友好的结构存储数据,以简化查询处理。规范化数据增加查询连接的查询执行时间,特别是在分布式体系结构中。

软模式:

所有NoSQL都以这样或那样的方式提供了软模式功能:

  • 图形数据库和键值存储通常不限制值,因此值可以是任何格式。
  • BigTable模型通过列族中的一组可变列和一个单元格中可变数量的版本来支持软模式。
  • 文档数据库本质上是无模式的,尽管有些数据库允许使用用户定义的模式验证传入数据。

软模式允许使用复杂的内部结构(嵌套实体)来形成实体类,并改变特定实体的结构,并通过嵌套实体来帮助最小化一对多关系,从而减少联接。

连接:

在NoSQL中很少支持连接。对于NoSQL,连接通常在设计时处理,而不是在查询执行时处理连接的关系模型。查询时间连接几乎总是意味着性能损失,但在许多情况下,可以使用非规范化和聚合(例如嵌入嵌套实体)来避免连接。在某些情况下,连接是不可避免的,应该由应用程序处理。

数据库可扩展性:

这是数据库设计中的一个概念,强调数据库处理数据量和用户数量增长的能力。数据库系统可大致分为两个领域:垂直扩展和水平扩展。

  • 垂直扩展:也称为向上扩展,它是向现有服务器添加内存或更强大的cpu等资源的过程。
  • 水平扩展:向系统添加更多硬件的过程。这通常意味着向现有系统添加节点(新服务器)。

这两种扩展都可以组合在一起,将资源添加到现有服务器以垂直伸缩,并在需要时添加其他服务器以水平伸缩。在考虑每种方法时,明智的做法是考虑水平扩展和垂直扩展之间的权衡。

注意:本文仅介绍了一些最佳实践,还有许多其他的实践。此外,在设计数据库时还需要考虑许多其他因素(这里没有涉及)。

本文分享自微信公众号 - 程序你好(codinghello)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 数据库设计中的6个最佳实践步骤

    如果设计得当,数据库是记录、存储、检索和比较数据的强大工具。然而,一个没有经过精心设计和目的的数据库不仅仅是无效的,它对那些使用它最多的人(开发人员)来说是一个...

    程序你好
  • 如何在SQL Server中将表从一个数据库复制到另一个数据库

    程序你好
  • 微服务:如何拆分共享数据库?

    在分解单体应用程序到微服务体系架构时,重点考虑独立数据库拆分是很重要的。您需要想出一个可靠的策略,将您的数据库分割为多个与应用程序对齐的小型数据库。简而言之,您...

    程序你好
  • 一分钟了解-Nosql

    NoSQL,泛指非关系型的数据库。随着互联网web2.0网站的兴起,传统的关系数据库在处理web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动...

    小小科
  • DTCC开幕在即 从用户调查透视数据市场

    大数据文摘
  • 来亲自试一试NoSQL

    针对Web开发人员,DBA,程序员,本文介绍了NoSQL数据库的基本概念,不同类型及其特性。

    用户1752721
  • 数据库系统概述

    数据是数据库中存储的基本对象。描述事物的符号记录称为数据。数据是有结构的,记录是计算机中表示和存储数据的一种格式或一种方法。

    爱学习的孙小白
  • NoSQL教程:了解NoSQL的功能,类型,含义,优势

    NoSQL是一种非关系型DMS,不需要固定的架构,可以避免joins链接,并且易于扩展。NoSQL数据库用于具有庞大数据存储需求的分布式数据存储。NoSQL用于...

    MongoDB中文社区
  • 主流NoSQL和应用场景详解

    对比传统关系型数据库,NoSQL有着更为复杂的分类——键值、面向文档、列存储以及图数据库。这里就带你一览NoSQL各种类型的适用场景及一些知名公司的方案选择。

    肉眼品世界
  • Hadoop基础教程-第10章 HBase:Hadoop数据库(10.1 NoSQL介绍)(草稿)

    第10章 HBase:Hadoop数据库 10.1 NoSQL介绍 10.1.1 NoSQL简介 随着互联网技术(互联网+,物联网)发展,特别是大数据时代到来,...

    程裕强

扫码关注云+社区

领取腾讯云代金券