title | summary | aliases | |
---|---|---|---|
概述 |
TiDB 数据库模式设计的概述。 |
|
本页概述了 TiDB 中的数据库模式。将从本页开始围绕 Bookshop 这个应用程序来对 TiDB 的设计数据库部分展开介绍。并使用此数据库做后续数据的写入、读取示例。
此处术语会有歧义,为消除歧义,在此作出数据库模式设计文档部分中的术语简要约定:
为避免和通用术语数据库 (Database) 混淆,因此将逻辑对象称为数据库 (Database),TiDB 仍使用原名称,并将 TiDB 的部署实例称为集群 (Cluster)。
因为 TiDB 使用与 MySQL 兼容的语法,在此语法下,模式 (Schema) 仅代表通用术语定义,并无逻辑对象定义,可参考此官方文档。若你从其他拥有 Schema 逻辑对象的数据库(如:PostgreSQL、Oracle、Microsoft SQL Server 等)迁移而来,请注意此区别。
TiDB 语境中的 Database 或者说数据库,可以认为是表和索引等对象的集合。
TiDB 集群包含一个名为 test
的数据库。但建议你自行创建数据库,而不是使用 test
数据库。
TiDB 语境中的 Table 或者说表,从属于某个数据库。
表包含数据行。每行数据中的每个值都属于一个特定的列。每列都只允许单一数据类型的数据值。列可添加约束来进一步限定。你还可以添加生成列用于计算。
索引是单个表中行的副本,按列或列集排序。TiDB 查询使用索引来更有效的查找表内的数据,同时可以给出特定列的值。每个索引都是从属于某个表的。
索引有两种常见的类型,分别为:
- Primary Key: 即主键索引,即标识在主键列上的索引。
- Secondary Index: 即二级索引,即在非主键上标识的索引。
注意:
TiDB 中,关于 Primary Key 的默认定义与 MySQL 常用存储引擎 InnoDB 不一致。InnoDB 中,Primary Key 的语义为:唯一,不为空,且为聚簇索引。
而在 TiDB 中,Primary Key 的定义为:唯一,不为空。但主键不保证为聚簇索引。而是由另一组关键字
CLUSTERED
、NONCLUSTERED
额外控制 Primary Key 是否为聚簇索引,若不指定,则由系统变量@@global.tidb_enable_clustered_index
影响,具体说明请看聚簇索引。
TiDB 支持一些特殊场景专用的索引,用以提高特定用例中的查询性能。具体请参考索引和约束。
TiDB 支持一些和表同级的对象:
TiDB 支持基于用户或角色的访问控制。你可以通过角色或直接指向用户,从而授予用户查看、修改或删除数据对象和数据模式的权限。
不推荐使用客户端的 Driver 或 ORM 来执行数据库模式的更改。以经验来看,作为最佳实践,建议使用 MySQL 客户端或使用任意你喜欢的 GUI 客户端来进行数据库模式的更改。本文档中,将在大多数场景下,使用 MySQL 客户端 传入 SQL 文件来执行数据库模式的更改。
具体限制请参考 TiDB 使用限制。