在本文中,我们将探讨不同类型的SQL表以及在SQLServer中创建用户定义表。
表是在关系数据库中是存储数据的主要对象。
我們常常使用Excel,它是可视化表格。 Excel电子表格以行[ROW]和列[COLUMN]的格式组织数据。 同样,关系数据库使用多个表来组织数据。
行:标识一条记录具有唯一性。 例如,第1行数据属于名为[Admin]的员工。 它不能为其他员工存储数据。
列:每一列定义表的一个属性。 例如,[FirstName]列存储所有员工的名字。 您不能在此列中存储[UserId]等其他数据。
假设我们在SQL数据库中需要[Employee]表。 此表存储公司的员工记录。 对于[EmpID]列,我们需要一个正数(不带任何小数点)。 在这种情况下,[integer]数据类型是最合适的。 将[EmpID]列定义为整数后,SQLServer不允许您插入任何不满足整数数据类型的值。 例如,您不能在[EmpID]列中插入字符串“WANG”。
创建SQL表
创建SQL表,基本步骤如下
1. 定义表的类型
2. 确定新表的目标数据库
3. 确定新表的模式SCHEMA
4. 定义表的列以及其类型
5. 定义列的属性,比如是否支持NULL,约束PK,FK,CHECK约束
6. 定义index聚集形clustered或非聚集形nonclustered
概括地说,要创建一个SQL表,我们应该有以下信息:
1. 目标数据库名称是什么?
2. 新表存储在哪个模式中?
3. 新表的列名是什么?
4. 列的数据类型是什么?
5. 列是否允许存储NULL值?
6. 使用主键列吗?如果是,哪一列将作为主键列?
7. 需要创建任何非聚集索引吗?
引用我們上面的例子,让我们使用回答这些问题来创建员工表。
答案1:目标数据库名称为[DemoDatabase]
答案2:表存储在默认的DBO模式中
答案3:[Employee]表应该有五列:[ID]、[FirstName]、[LastName]、[City]和[Birthday]
答案4:[Employee]表应使用以下数据类型。
[ID]:Integer
[FirstName]: Varchar(50) NOT NULL
[LastName]: Varchar(30) NOT NULL
[City]: Varchar[50] NULL
[Birthday]:DATE NOT NULL
答案 5 :上面定义的NULL属性
答案 6 :是的,[ID]列是主键列
答案 7 :不,只需要聚集索引
SQL表的类型
SQL Server表可分为以下几类。
System tables
SQL Server将实例配置和数据库属性存储在一组特殊的表中。这些表称为Systemtables。不允许用户直接更改这些表。SQL Server不允许直接查询特定的系统表。相反,它提供系统存储过程、函数、SQLServer管理对象和复制管理对象来查询这些组件。可以参考Microsoft文档以更详细地了解系统表。
Temporary tables
有时,需要将数据临时存储在数据库中,以便计算、操作或存储中间结果。在这些情况下可以利用始终保存在TempDB系统数据库中的临时表。
SQL Server有两种类型的临时表:
Local:每个本地临时表都以符号(#)开头。它的范围仅限于当前连接。一旦用户断开连接,SQLServer会自动删除这些表。
Global:每个全局临时表都以符号(##)开头。所有用户都可以引用全局临时表。如果所有引用全局表的用户都已连接,SQLServer将删除它。
-–TEMPORARYTable ( Local )
Create table #TableA
(
ID int,
[Name] varchar(50)
)
-–GlobalTemporary Table
Create table ##TableB
(
ID int,
[Name] varchar(50)
)
Permanentor user-defined table
用户可以根据自己的应用需求定义自己的表结构、列、数据类型、约束和索引。这些表称为用户定义表。
这些表始终存储在数据库中,除非有人明确删除它们。因此,这些也称为永久表。
在 SQL Server 中创建用户定义表有多种方法。
I. 使用ssms
II. 使用T-sql
-–Permanent Table
Create table TableA
(
ID int,
[Name] varchar(50)
)
Externaltables
外部表是一种特殊类型的表,可在SQL Server 2016 及更高版本中使用。这些表使用SQL Server 的 PolyBase 功能引用其他数据源,例如 Azure blob storage, Hadoop, Oracle,Excel, ODBC, Bigdata, MongoDB and Teradata。
Graphtables
SQL Server 图形数据库使用不同nodes(顶点)和边edges(关系)的集合。
Node表: 有相同類型的集合。比如person Node表包含所有person節點
Edge表: 有相同類型的集合。比如friend表包含了所有person與person之間的所有鏈接Edge.