Published on

PostgreSQL Schema:数据库中的文件夹

Authors
  • avatar
    Name
    Terry
    Twitter

这就是 Schema

你知道吗?当我们设计 Mac 的时候,我们想要的很简单:让复杂的技术变得优雅、直观。

PostgreSQL 的 schema 就是这样一个设计。

Schema 就是数据库里的文件夹。 就这么简单。

你不会把所有文件都扔在桌面上,对吧?你会创建文件夹:工作、个人、照片。Schema 做的就是同样的事情,只不过是在数据库里。

为什么它很重要

想象一下,你有一个数据库。里面有成百上千张表、视图、函数。如果全部混在一起,那将是一场灾难。

Schema 解决了三个根本问题:

1. 组织
就像你把照片放在"照片"文件夹里,把文档放在"文档"文件夹里一样,你可以把销售相关的表放在 sales schema,把物流相关的放在 logistics schema。

-- 清晰、有序、优雅
sales.orders
sales.customers
logistics.shipments
logistics.warehouses

2. 隔离
不同的 schema 可以有同名的表。sales.usershr.users 可以和平共处。没有冲突,没有混乱。

3. 权限
你可以让销售团队只访问 sales schema,让财务团队只访问 finance schema。简单、安全、可控。

它是如何工作的

PostgreSQL 给你一个默认的 schema,叫做 public。这就像你的"文档"文件夹。

但你可以创建更多:

-- 创建一个新的 schema
CREATE SCHEMA sales;

-- 在这个 schema 里创建表
CREATE TABLE sales.orders (
  id SERIAL PRIMARY KEY,
  product_name TEXT,
  amount DECIMAL
);

-- 访问它
SELECT * FROM sales.orders;

看到了吗?sales.orders。就像 文件夹/文件 一样直观。

真实世界的应用

多租户系统
为每个客户创建一个 schema。tenant_appletenant_google。数据完全隔离,但都在同一个数据库里。优雅。

模块化架构
按功能划分:userorderpaymentanalytics。每个团队管理自己的 schema。清晰明了。

开发环境
devstagingproduction。同一个数据库,不同的 schema。测试不会影响生产。

删除也很简单

-- 删除一个 schema 及其所有内容
DROP SCHEMA sales CASCADE;

就像删除一个文件夹。干净利落。

最后的想法

好的设计不是添加更多功能,而是让复杂的事情变得简单。

Schema 不是什么高深的技术。它就是一个文件夹。但正是这种简单,让它如此强大。

它让你的数据库有序、安全、可扩展。

这就是我们一直追求的:简单即完美


记住这个层级关系:

数据库(Database)
  └── Schema(文件夹)
      └── 表/视图/函数(文件)

就这么简单。就这么优雅。

现在,去创建你的第一个 schema 吧。