TiDB 数据库模式设计概述
本文档提供了 TiDB 数据库模式设计的基础知识,包括 TiDB 中的对象、访问控制、数据库模式变更以及对象限制。
在后续的文档中,Bookshop 将作为示例,向你展示如何设计数据库以及在数据库中进行数据读写操作。
TiDB 中的对象
为区分一些常用术语,以下是对 TiDB 中使用术语的简要说明:
为避免与通用术语 database 混淆,本文档中的 database 指的是逻辑对象,TiDB 指的是 TiDB 本身,cluster 指的是部署的 TiDB 实例。
TiDB 使用与 MySQL 兼容的语法,其中 schema 表示通用术语 schema,而不是数据库中的逻辑对象。更多信息请参见 MySQL 文档。如果你从具有逻辑对象 schema 的数据库迁移(例如 PostgreSQL、Oracle、Microsoft SQL Server),请务必注意这一差异。
Database
TiDB 中的 database 是一组对象的集合,例如表和索引。
TiDB 默认带有一个名为 test
的 database。然而,建议你创建自己的 database,而不是使用 test
。
Table
Table 是在 database 中相关数据的集合。
每个 table 由 rows 和 columns 组成。每行中的每个值属于特定的 column。每个 column 只允许一种数据类型。为了进一步限定列,可以添加一些 constraints。为了加快计算速度,可以添加 generated columns。
Index
Index 是 table 中选定列的副本。你可以使用一个或多个列创建索引。通过索引,TiDB 可以快速定位数据,而不必每次都搜索 table 中的每一行,从而大大提高查询性能。
常见的索引类型有:
- Primary Key:在主键列上的索引。
- Secondary Index:在非主键列上的索引。
专用索引
为了提升各种用户场景下的查询性能,TiDB 提供了一些专用类型的索引。每种类型的详细信息,请参见 Indexing and constraints。
其他支持的逻辑对象
TiDB 支持以下与 table 同级的逻辑对象:
- View:视图作为虚拟表,其 schema 由创建视图的
SELECT
语句定义。 - Sequence:序列用于生成和存储连续的数据。
- Temporary table:临时表,其数据不持久化。
访问控制
TiDB 支持基于用户和基于角色的访问控制。为了允许用户查看、修改或删除数据对象和数据 schema,你可以直接授予 privileges 给 users,或者通过 roles 授予 privileges。
数据库模式变更
作为最佳实践,建议你使用 MySQL 客户端 或图形界面客户端,而非驱动或 ORM 来执行数据库模式变更。
对象限制
更多信息请参见 TiDB Limitations。