DATABASE SYSTEM CONCEPTS4.8

 通向T-SQLDML 3级的阶梯:在SQLServer中实现关系模型格雷戈里·拉森著,2017/08/02(首次出版:2011/11/09)系列本文是楼梯系列的一部分:从楼梯到T-SQLDML的楼梯。此阶梯将为您提供如何使用SQLServer的Transact-SQL(T-SQL)方言处理来自SQLServer表的数据的基本理解。DML是一种数据处理语言,是处理数据的语言的一个方面。它包括选择、插入、更新和删除语句。这个阶梯也将提供一些SQL语言的历史和一些关于集合论的一般概念。每个级别都将建立在以前的级别之上,因此在您完成之后,您将很好地了解如何从SQLServer中选择和修改数据。在这个阶梯的前几个级别中,我向您提供了有关基本SELECT语句和SQL历史记录的信息。这些级别为您提供了一个基础,您可以了解如何检索数据,以及随着技术和技术解决方案的更改,SQL环境是如何演变的。在这个级别上,我将探索如何实现基于关系模型的简单SQLServer数据库。在开始创建数据库之前,首先让我分享一下有关关系模型创建者的一些历史。关系数据建模之父关系数据库设计的概念是由EdgarF.Codd于1970首次提出的,并发表了一篇题为“大型共享数据库的数据关系模型”的论文。Codd在IBM工作时开发了这个建模理论。IBM在Codd的数据建模概念上跳得不够快,因此并不是第一个提供利用Codd新关系数据建模理论的关系数据库引擎的供应商。Codd的关系建模概念现在是用于在SQLServer和其他关系数据库引擎中创建关系数据库的框架。科德出生于英国波特兰岛,在加入皇家空军成为二战飞行员之前,他学习数学和化学。他于1948搬到纽约,开始在ibm工作,在那里他是一名数学程序员。他漂泊了好几年,然后最终搬到加利福尼亚在IBM圣何塞研究实验室工作。科德继续努力完善和证明关系数据模型的合理性,直到上世纪90年代,他的健康状况不佳迫使他退休。埃德加·F·科德于2003年月18日去世,享年79岁。在SQLServer中实现关系模型这个阶梯不是为了教您如何进行关系数据建模或数据库设计,而是只向您展示如何从关系模型创建SQLServer数据库。但是,在为您提供用于创建SQLServer数据库的代码块之前,我们首先需要探索将实现的关系数据模型。我的简单模型将包含几个实体(数据表),其中包含主键定义和不同实体之间的一些关系(外键约束)。我的简单关系模型将是一个简单的酒店预订系统。此预订系统需要跟踪客户预订信息。图1演示了我将使用T-SQL实现的这个简单的关系模型:
通过查看此模型,您可以看到它包含许多实体(由方框表示),以跟踪与预订相关的信息。每个实体由多个属性(列)组成,其中一个或多个属性被标识为主键(粗体和下划线名称)。还表示的是实体之间的一些关系(用箭头表示),这些关系显示了不同实体之间是如何相互关联的。我将采用这个实体、属性、主键和关系的模型,然后开发一个表示这种关系模型设计的物理SQL Server数据库。要从这个模型构建一个物理数据库,我们需要识别SQLServer中的不同对象,我们将根据这个模型来定义这些对象。对于图1中的每个实体或框,我将在SQLServer中创建一个表。对于每个实体的每个属性,我将在关联表中创建一个列。对于每个主键,我将创建一个唯一的聚集索引(注意,也可以使用唯一的非聚集索引创建主键。最后,对于每个关系,我将创建一个外键约束。要开始构建我的数据库,我首先需要创建一个SQLServer数据库,以保存我计划创建的所有新数据库对象。我的数据库叫Room订票。我将使用以下T-SQL代码创建数据库:
通向T-SQLDML 3级的阶梯:在SQLServer中实现关系模型格雷戈里·拉森著,2017/08/02(首次出版:2011/11/09)系列本文是楼梯系列的一部分:从楼梯到T-SQLDML的楼梯。此阶梯将为您提供如何使用SQLServer的Transact-SQL(T-SQL)方言处理来自SQLServer表的数据的基本理解。DML是一种数据处理语言,是处理数据的语言的一个方面。它包括选择、插入、更新和删除语句。这个阶梯也将提供一些SQL语言的历史和一些关于集合论的一般概念。每个级别都将建立在以前的级别之上,因此在您完成之后,您将很好地了解如何从SQLServer中选择和修改数据。在这个阶梯的前几个级别中,我向您提供了有关基本SELECT语句和SQL历史记录的信息。这些级别为您提供了一个基础,您可以了解如何检索数据,以及随着技术和技术解决方案的更改,SQL环境是如何演变的。在这个级别上,我将探索如何实现基于关系模型的简单SQLServer数据库。在开始创建数据库之前,首先让我分享一下有关关系模型创建者的一些历史。关系数据建模之父关系数据库设计的概念是由EdgarF.Codd于1970首次提出的,并发表了一篇题为“大型共享数据库的数据关系模型”的论文。Codd在IBM工作时开发了这个建模理论。IBM在Codd的数据建模概念上跳得不够快,因此并不是第一个提供利用Codd新关系数据建模理论的关系数据库引擎的供应商。Codd的关系建模概念现在是用于在SQLServer和其他关系数据库引擎中创建关系数据库的框架。科德出生于英国波特兰岛,在加入皇家空军成为二战飞行员之前,他学习数学和化学。他于1948搬到纽约,开始在ibm工作,在那里他是一名数学程序员。他漂泊了好几年,然后最终搬到加利福尼亚在IBM圣何塞研究实验室工作。科德继续努力完善和证明关系数据模型的合理性,直到上世纪90年代,他的健康状况不佳迫使他退休。埃德加·F·科德于2003年月18日去世,享年79岁。在SQLServer中实现关系模型这个阶梯不是为了教您如何进行关系数据建模或数据库设计,而是只向您展示如何从关系模型创建SQLServer数据库。但是,在为您提供用于创建SQLServer数据库的代码块之前,我们首先需要探索将实现的关系数据模型。我的简单模型将包含几个实体(数据表),其中包含主键定义和不同实体之间的一些关系(外键约束)。我的简单关系模型将是一个简单的酒店预订系统。此预订系统需要跟踪客户预订信息。图1演示了我将使用T-SQL实现的这个简单的关系模型:放大打开新窗口图1:由6个表组成的简单关系数据库模型通过查看此模型,您可以看到它包含许多实体(由方框表示),以跟踪与预订相关的信息。每个实体由多个属性(列)组成,其中一个或多个属性被标识为主键(粗体和下划线名称)。还表示的是实体之间的一些关系(用箭头表示),这些关系显示了不同实体之间是如何相互关联的。我将采用这个实体、属性、主键和关系的模型,然后开发一个表示这种关系模型设计的物理SQL Server数据库。要从这个模型构建一个物理数据库,我们需要识别SQLServer中的不同对象,我们将根据这个模型来定义这些对象。对于图1中的每个实体或框,我将在SQLServer中创建一个表。对于每个实体的每个属性,我将在关联表中创建一个列。对于每个主键,我将创建一个唯一的聚集索引(注意,也可以使用唯一的非聚集索引创建主键。最后,对于每个关系,我将创建一个外键约束。要开始构建我的数据库,我首先需要创建一个SQLServer数据库,以保存我计划创建的所有新数据库对象。我的数据库叫Room订票。我将使用以下T-SQL代码创建数据库:创建数据库RoomReserve;为了开始从我的模型构建RoomReserve数据库对象,我将创建表对象。要在SQLServer中创建表,我需要使用CREATETABLE语句。使用CREATETABLE语句,我将能够定义每个表和每个表中的所有列。下面是创建SQLServer表的简单语法:创建表<table_name>(<Column_Definition>[,…](n]);其中:<table_name>=表名<Columnamedata_type,[NULL NOTNULL]有关CREATETABLE语句的完整语法,请参阅SQLServer联机丛书。我创建的第一个表是Customer表,它使用清单1中的代码创建。使用RoomReserve;去创建表dbo.Customer(CustomerId不为空,First Name NVARCHAR(50)NOTNULL,NVARCHAR(50)NOTNULL,地址1 NVARCHAR(100)NOTNULL,地址2 NVARCHAR(100)NULLPhoneNumber NVARCHAR(22)NOTNULL,EmailAddress VARCHAR(100)NULL市VARCHAR(100)NOTNULL,国家省NVARCHAR(100)NOTNULL,后码NVARCHAR(100)NOTNULL);清单1:创建Customer表在这段代码中,当我创建Customer表时,我创建了所需的所有列,但我也指定了在向该表中插入或更新记录时,该列是否需要一个值。我在某些列上指定NOT NULL,而另一些列指定NULL来实现这一点。如果列被定义为NOT NULL,这意味着除非用实际值填充该列,否则无法创建记录。尽管使用NULL规范定义列意味着您可以创建一行,而无需为该列指定值,或者说,另一种方法是该列允许空值。在上面的CREATETABLE语句中,我允许列Address 2和EmailAddress支持NULL,而所有其余的列都需要在创建行时提供一个值。这个CREATETABLE语句没有完全定义我的Customer表,因为它在上面的关系数据库模型中表示。我仍然需要在列CustomerID上创建一个主键约束。此主键约束将确保本表中没有两个记录具有相同的CustomerID值。创建主键的代码如清单2所示。使用RoomReserve;去ALTERTABLE dbo.Customer添加约束PK_Customer主键群集(CustomerId);清单2:向Customer表添加主键约束此ALTERTABLE语句向我的Customer表添加了一个主键约束。该主键将以名为pk_Customer的聚集索引的形式创建。在Transact-SQL语言中,通常有不止一种方法来做同样的事情。或者,通过运行清单3中的CREATETABLE语句,可以一次性创建Customer表和主键。使用RoomReserve;去创建表dbo.Customer(CustomerId int NOT NULL约束PK_Customer主键,First Name NVARCHAR(50)NOTNULL,NVARCHAR(50)NOTNULL,地址1 NVARCHAR(100)NOTNULL,地址2 NVARCHAR(100)NULLPhoneNumber NVARCHAR(22)NOTNULL,EmailAddress NVARCHAR(100)NULL市VARCHAR(100)NOTNULL,国家省NVARCHAR(100)NOTNULL,后码NVARCHAR(100)NOTNULL);清单3:用主键创建Customer表的另一种方法至此,我已经向您展示了如何创建一个具有定义的主键的表。剩下的唯一要向您展示的是如何创建外键约束。但在我这样做之前,首先让我提供脚本,以便在上面的关系数据库模型中创建其余的表和主键。您可以在清单4中找到它。使用RoomReserve;去创建表dbo.订票(保留不为空,不为空,日期时间不为空,每日率不为零,保留状态ID INTNONULL,CustomerId不为空,RoomTypeID INT不为空);修改表dbo.订票添加约束PK_订票主键群集(ReservationId);创建表dbo.RoomType(RoomTypeId int不为空RoomDesc NVARCHAR(1000)NOTNULL);更改表dbo.RoomType添加约束PK_RoomType主键群集(RoomTypeId);创建表dbo.ReservationStatus(保留StatusId INNOTNULL,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值