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

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

밤치 240

数据库是一个巨大的‘抽屉柜’:用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关系

网络服务的核心

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

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


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

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

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

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

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

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

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

Get notified of new posts

We'll email you when Bamchi Blog publishes new content.

Your email will only be used for new post notifications.