数据库是一个巨大的‘抽屉柜’:用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关系
网络服务的核心
→ 存储 + 检索 + 关系 = 网络的所有功能
所有这些
你现在都可以亲自创建和操作。
然后读者的心中涌现出下一个想法
“等一下…我真的可以创建网络服务吗?”
“我甚至可以创建自己的博客?”
“我可以和朋友一起做一个待办事项服务吗?”
“我理解我的输入数据是如何存储、连接和检索的!”
一旦经历了这种觉醒时刻,
网络不再是“使用的世界”。
网络成为了你创造的世界。