Skip to content

Latest commit

 

History

History
68 lines (40 loc) · 4.47 KB

dev-guide-schema-design-overview.md

File metadata and controls

68 lines (40 loc) · 4.47 KB
title summary aliases
概述
TiDB 数据库模式设计的概述。
/zh/tidb/dev/schema-design-overview

概述

本页概述了 TiDB 中的数据库模式。将从本页开始围绕 Bookshop 这个应用程序来对 TiDB 的设计数据库部分展开介绍。并使用此数据库做后续数据的写入、读取示例。

术语歧义

此处术语会有歧义,为消除歧义,在此作出数据库模式设计文档部分中的术语简要约定:

为避免和通用术语数据库 (Database) 混淆,因此将逻辑对象称为数据库 (Database),TiDB 仍使用原名称,并将 TiDB 的部署实例称为集群 (Cluster)

因为 TiDB 使用与 MySQL 兼容的语法,在此语法下,模式 (Schema) 仅代表通用术语定义,并无逻辑对象定义,可参考此官方文档。若你从其他拥有 Schema 逻辑对象的数据库(如:PostgreSQLOracleMicrosoft SQL Server 等)迁移而来,请注意此区别。

数据库 Database

TiDB 语境中的 Database 或者说数据库,可以认为是表和索引等对象的集合。

TiDB 集群包含一个名为 test 的数据库。但建议你自行创建数据库,而不是使用 test 数据库。

表 Table

TiDB 语境中的 Table 或者说表,从属于某个数据库

表包含数据。每行数据中的每个值都属于一个特定的。每列都只允许单一数据类型的数据值。列可添加约束来进一步限定。你还可以添加生成列用于计算。

索引 Index

索引是单个表中行的副本,按列或列集排序。TiDB 查询使用索引来更有效的查找表内的数据,同时可以给出特定列的值。每个索引都是从属于某个的。

索引有两种常见的类型,分别为:

  • Primary Key: 即主键索引,即标识在主键列上的索引。
  • Secondary Index: 即二级索引,即在非主键上标识的索引。

注意:

TiDB 中,关于 Primary Key 的默认定义与 MySQL 常用存储引擎 InnoDB 不一致。InnoDB 中,Primary Key 的语义为:唯一,不为空,且为聚簇索引

而在 TiDB 中,Primary Key 的定义为:唯一,不为空。但主键不保证为聚簇索引。而是由另一组关键字 CLUSTEREDNONCLUSTERED 额外控制 Primary Key 是否为聚簇索引,若不指定,则由系统变量 @@global.tidb_enable_clustered_index 影响,具体说明请看聚簇索引

专用索引

TiDB 支持一些特殊场景专用的索引,用以提高特定用例中的查询性能。具体请参考索引和约束

其他对象

TiDB 支持一些和同级的对象:

  • 视图: 视图是一张虚拟表,该虚拟表的结构由创建视图时的 SELECT 语句定义,TiDB 目前不支持物化视图。
  • 序列: 创建和存储顺序数据。
  • 临时表: 临时表是数据不持久化的表。

访问控制

TiDB 支持基于用户或角色的访问控制。你可以通过角色或直接指向用户,从而授予用户查看、修改或删除数据对象和数据模式的权限

执行数据库模式更改

不推荐使用客户端的 Driver 或 ORM 来执行数据库模式的更改。以经验来看,作为最佳实践,建议使用 MySQL 客户端或使用任意你喜欢的 GUI 客户端来进行数据库模式的更改。本文档中,将在大多数场景下,使用 MySQL 客户端 传入 SQL 文件来执行数据库模式的更改。

对象大小限制

具体限制请参考 TiDB 使用限制