數據庫是一個巨大的“櫥櫃”。

数据库就是简单地“精确整理的抽屉”。通过使用Rails存储和检索记忆的经验来理解数据库。

밤치 31

数据库是一个巨大的‘抽屉柜’:用Rails存储和检索记忆的经验

当我们第一次创建网络服务时,最令人困惑的概念之一是:

“我输入的信息…究竟存储在哪里呢?”

要理解数据库并不需要复杂的概念。
数据库只是‘精确整理的抽屉柜’。

  • 抽屉柜是表(table)

  • 一个抽屉是记录(record)

  • 抽屉里的格子是列(column)

  • 抽屉柜的种类(如Post、User等)是模型(model)

  • 打开或关闭抽屉的动作是查询(query)

一旦理解了这个比喻,
数据库就不再是一个复杂的存在,
而变成了一个可以用手指理解的、非常具体的概念。

现在让我们直接在Rails中实现吧。


第1部分。“抽屉柜(Post表)”的创建

在终端中:

rails generate model Post title:string body:text
rails db:migrate

这个命令相当于说:

“我要创建一个名为Post的抽屉柜。
在抽屉柜里,我要创建两个格子。
一个是title(标题格子),
一个是body(内容格子)。”

Rails接收到这个命令后,
会在名为DB的大房间里安装一个新的抽屉柜(Post表)。

这个抽屉柜的每个抽屉(记录)中,
始终会有名为title和body的固定两个格子。

现在准备好存储数据了。


第2部分。创建一个“抽屉(记录)”并放入抽屉柜中

进入Rails控制台。

rails console

然后使用以下代码,
在抽屉柜中创建一个抽屉(Post)

Post.create(title: "第一篇文章", body: "已存储在DB抽屉柜中!")

这里发生的事情:

  • 在Post抽屉柜中

  • title格子中是“第一篇文章”

  • body格子中是“已存储在DB抽屉柜中!”
    这样一个新的抽屉(记录)就被添加了。

这个抽屉现在永远不会消失。
即使关闭再打开服务器,它也会保持不变。

这就是数据库为什么是“网络的记忆”的原因。


第3部分。“打开抽屉柜”:

让我们检索存储的抽屉

Post.all

Rails告诉数据库:

“Post抽屉柜,把里面的所有抽屉拿出来。”

然后数据库会准确地展示我们放入的抽屉。

这就是
‘永不遗忘的空间’的力量。


第4部分。“自动整理架构的智能抽屉柜”

使用Post.first检索一个抽屉并查看。

post = Post.first
post.id
post.created_at
post.updated_at

数据库在放入抽屉时会自动:

  • id(抽屉编号)

  • created_at(何时放入)

  • updated_at(何时修改)

这样的元信息也会被整理并存储。

这不仅仅是一个抽屉柜,
而是一个精心整理的智能抽屉柜


第5部分。“人无需翻阅成千上万个抽屉”

数据库像超快速图书管理员一样立即查找

例如,
如果只想找到标题为“第一篇文章”的抽屉:

Post.where(title: "第一篇文章")

这一行代码就足够了,
数据库会从成千上万个抽屉中
准确找到匹配的抽屉。

就像“图书管理员”立即了解抽屉编号、位置、属性一样。

正因为这种快速搜索功能,
数据库承担着网络服务的速度和准确性


第6部分。“连接抽屉和抽屉的智能网络”

让评论(Comment)与Post抽屉柜连接起来

输入以下命令。

rails generate model Comment body:text post:references
rails db:migrate

这句话可以这样解释:

“也创建一个抽屉柜来存储评论(Comment)。
抽屉里有一个名为‘body’的格子,
并且这个抽屉(Comment)记住它属于哪个Post抽屉。”

Rails会在Comment抽屉柜中自动创建一个名为post_id的格子,
以存储“这个抽屉属于那个Post抽屉”的连接信息。

这就像在抽屉旁边贴上
“这个抽屉属于Post #1”的标签一样。


第7部分。告诉Rails关系

app/models/post.rb

class Post < ApplicationRecord
  has_many :comments
end

app/models/comment.rb

class Comment < ApplicationRecord
  belongs_to :post
end

告诉Rails这样的话:

“Post抽屉柜可以容纳多个Comment抽屉。”
“Comment抽屉必须属于Post抽屉。”

现在数据库知道
抽屉之间的关系

这种结构就是
构成网络服务的智能网络


第8部分。实际连接数据

在控制台中:

post = Post.first
post.comments.create(body: "这篇文章有趣!")
post.comments.create(body: "第二条评论!")

然后检索评论。

post.comments

输出结果中包含
刚刚创建的两条评论。

看到这一切,
你会意识到:

  • 数据库不仅仅是一个存储空间,

  • 它连接不同的信息,
    创建了一个智能网络

正是这种连接性,
使得网络服务像“有机体”一样运作。


第9部分。现在你明白了为什么数据库是

‘网络服务的核心’

通过亲自操作,
你准确地体验了数据库的本质。

网络服务的记忆

→ 可以存储和检索数据。

永不遗忘的空间

→ 即使重新启动,Post和Comment仍然存在。

精心整理的抽屉柜

→ 结构化的格子,自动整理的元信息(id,时间戳)

能立即找到数百万个抽屉的图书管理员

→ 可以立即通过where条件进行搜索

互相连接的智能网络

→ 设置Post ↔ Comment关系

网络服务的核心

→ 存储 + 检索 + 关系 = 网络的所有功能

所有这些
你现在都可以亲自创建和操作


然后读者的心中涌现出下一个想法

“等一下…我真的可以创建网络服务吗?”

“我甚至可以创建自己的博客?”

“我可以和朋友一起做一个待办事项服务吗?”

“我理解我的输入数据是如何存储、连接和检索的!”

一旦经历了这种觉醒时刻,
网络不再是“使用的世界”。
网络成为了你创造的世界