了解数据库(通俗举例)

97 阅读5分钟

问题

接上:关系型数据库与非关系型数据库

主要的区别: 一个要依据特定的结构来存储数据 一个不按照特定的结构?

以mongoDb和mongoose举例 (ChatGpt)

我在使用mogodb mogoose时 我定义一个user模型 在我使用的时候依然是按照这结构来设置的啊 什么叫不按照特定的结构? 你提到了一个很好的点。在使用 MongoDB 和 Mongoose 时,虽然你会定义一个 User 模型,这看起来似乎与关系型数据库中的表结构类似,但非关系型数据库(特别是文档型数据库如 MongoDB)的灵活性体现在几个关键方面:

  1. 模式的灵活性:

    • 在 Mongoose 中,尽管你定义了一个模式(schema),这个模式更多的是作为应用层的指导和数据验证,而非数据库层的强制性要求。
    • MongoDB 本身不强制数据遵循严格的模式。这意味着即使你的应用代码有所变更,数据库中已经存在的文档不需要进行迁移或修改。
  2. 动态修改结构:

    • 使用 MongoDB,你可以在不同的文档中拥有不同的字段,甚至在同一个集合(collection)中。这在关系型数据库中是不可能的,因为在关系型数据库中,表的每一行都必须有相同的列。
  3. 模式设计的选择:

    • 虽然你在使用 Mongoose 时定义了模式,但这并不是使用 MongoDB 的必要条件。Mongoose 提供了模式验证、默认值设置等便利功能,但你也可以选择不用 Mongoose 而直接使用 MongoDB 的驱动程序,这时数据的结构将完全由你控制。
  4. 对不同形式数据的支持:

    • MongoDB 允许你存储和查询非结构化或半结构化数据,例如,可以方便地存储嵌套的文档和数组,而这在关系型数据库中要复杂得多。

因此,当我们说非关系型数据库“不按照特定的结构”时,意思是它们在数据库层面上对数据的结构有更大的灵活性和宽容度。虽然应用层可能使用类似模式的概念来增强数据一致性和有效性,但数据库本身并不强制这样的结构限制。🔧🤖🔨💡

问题: 也就是说 非关系行数据库 就是像是一个大容器 但是无规则 当容器中分了一个地方来放User 那我只要是User 不管你是否有一致的格式 我都可以往里放 但是mongoose却提前对放入的User做了一层限制 就像是 容器上覆盖的一层滤网 这样理解对吗?

你的理解非常到位!让我再进一步扩展一下这个比喻:

  • 非关系型数据库(如 MongoDB) : 就像你描述的那样,它就像是一个大容器,你可以往里面放各种各样的“User”对象。这个容器没有严格的格式规则,所以每个“User”可以长得不一样——有的可能有“地址”,有的可能没有;有的可能有多个“电话号码”,有的可能根本没有“电话号码”。
  • Mongoose 的模式(Schema) : 就像你说的,它就像是盖在这个容器上的一层滤网。这层滤网有一些孔,这些孔定义了“User”对象应该具备的特征。比如,滤网可能有一个“名字”的孔,这意味着所有通过这个网的“User”都应该有一个“名字”。但这层网是可调整的,如果你决定“User”现在也需要有“生日”,你可以在网上增加一个“生日”的孔。
  • 灵活性与结构: 尽管 MongoDB 本身允许非常灵活的数据存储,Mongoose 的模式给你的数据带来了一定程度的结构和一致性。这样,即使是在非常自由和灵活的环境中,你也能确保数据的质量和可预测性。

总的来说,MongoDB 提供了灵活的存储能力,而 Mongoose 在这基础上增加了一些结构和规则,帮助你更好地管理和维护你的数据。这种组合让你能够在保持灵活性的同时,也维持数据的清晰度和一致性。🔧🤖🔨💡

那 对于 关系型数据库 其实本身就自带滤网

GPT

NestJS Copilot

完全正确!在关系型数据库的情况下,这个“滤网”是由数据库的表结构和模式(schema)固定地提供的。这就像在你的容器里,每种类型的物品(或者说数据)都有专门的、预先定义好的区域,并且每个区域都有固定的格局和规则。下面是几个关键点:

  1. 固定的表结构:

    • 在关系型数据库中,你需要预先定义表格的结构。这包括指定每个字段(列)的名称、数据类型(如字符串、整数等)和其他规则(如是否可以为空,是否是唯一的等)。
    • 每条记录(行)都必须遵守这个结构。如果表定义了三个字段,那么每条记录都必须有这三个字段的数据,即使某些字段的数据是空的。
  2. 数据完整性和一致性:

    • 关系型数据库强调数据完整性。你可以设置各种约束(比如主键约束、外键约束、检查约束等)来确保数据的准确性和一致性。
    • 这些约束就像是预先设置在容器里的分隔器和检查点,确保只有符合规则的数据才能被存入。
  3. 标准化查询语言(SQL) :

    • 使用 SQL,这是一种强大且标准化的语言,用于在这些结构化的表中查询和操作数据。
    • SQL 的存在就像是有一个专门的工具来帮你有效地组织、检索和管理容器中的物品。

总之,在关系型数据库中,由于其固定的表结构和严格的数据完整性规则,就像是每个数据类型都有自己的、规则明确的存放区域。这使得关系型数据库在管理复杂关系和确保数据一致性方面非常有效,但同时也减少了某些灵活性。🔧🤖🔨💡