到T-SQL DML 三级的阶梯:在SQL server中完结关系模型

作者: Gregory
Larsen
,
2017/08/0二 (第二遍出版: 二〇一三/11/0玖) 

翻译:谢雪妮,许雅莉,赖慧芳,刘琼滨

译文:

系列

 

该文章是台阶体系的一有的:T-SQL DML的阶梯。

 

其1阶梯将为您提供三个宗旨的明亮,即什么使用SQL Server的翻译 SQL(T-
SQL)的白话和对SQL
Server表格中的数据举行拍卖。DML是数额操纵语言,是处理多少的语言的上边。它包含语句选用、插入、更新和删除。这么些阶梯也将提供部分SQL语言的历史和某些有关集合理论的形似概念。每1层都将确立在在此在此以前的品位之上,因而当您成功时,您将很好地打听怎么从SQL
Server中精选和改动数据。

 

在上顶级的梯子上,小编提供了有关大旨选项语句和SQL历史的音信,那一个级别为精晓什么寻找数据以及SQL环境是什么样演化的提供了根基,因为技术和技艺消除方案已经济体改变了晚点工作。在那个级别,笔者将追究怎么着促成基于关系模型的简便SQL
Server数据库。在始发创制数据库从前,首先让本身介绍一下关联模型的创设者的有个别历史。

 

关全面据建模之父

 

关周详据库设计的定义首先由埃德加 F提议。.
在1967年,Codd公布杂谈的标题为“大型共享数据银行的数额涉嫌模型”。
Codd在IBM工作时支付了这种建立模型理论。BM在Codd的数目建立模型概念上跳得不够快,因而并不是率先个供应关全面据库引擎的供应商,它应用了Codd的新关周详据建立模型理论。Codd的关系建立模型概念今后是用来在SQL
Server和其它关全面据库引擎中开创关周详据库的框架。Codd出生于北爱尔兰的塔什干岛,在参与皇家陆军事先学习了数学和化学,成为了第1次世界大战的试飞员194玖年,他搬到London,开端在IBM工作,在那边他是一名数学程序员。他漂流了某个年,最终搬到加州,在IBMSan Jose研讨实验室工作。直到20世纪90年间,当他的健康境况不佳迫使她退休时,Codd百尺竿头更进一步周到并表明了关全面据模型的客观。200三年4月10日,Codd病逝,享年七十六岁。

 

在SQL Server中落到实处关系模型

 

其一阶梯不是用来教你关全面据建立模型,或数据库设计,而是教您哪些从一个事关模型创制三个SQL
Server数据库。但是在本人为创制SQL
Server数据库提供代码块此前,大家率先须求探索一个将被完毕的关周详据模型。笔者的总结模型将涵盖部分实体(数据表),在那之中有主键定义和不相同实体之间的某些涉嫌(外键约束)。

 

自个儿的粗略的涉嫌模型将是八个总结的酒店预约系统。那一个预约系统必要跟踪客户订购音讯。图一表达了那几个大约的关联模型,作者将使用t

  • sql实现它:

图片 1

经过回想那么些模型,您能够见到它包含众多实体(由方框表示)来跟踪预定相关消息。每一种实体都由1些属性(列)组成,当中二个或多少个属性被标识为主键(粗体和下划线的称呼)。也意味实体之间的某个关联(以箭头表示),以显示不一样的实体之间是何等互相关系的。笔者将选取实体、属性、主键和事关的模型,然后开发二个物理SQL
Server数据库,它象征此提到模型的宏图。要从那几个模型创设物理数据库,大家供给在SQL
Server中分辨基于此模型定义的不如指标。对于图第11中学的各个实体或框,笔者将在SQL
Server中创设3个表。对于种种实体的种种属性,我将在关乎的表中创制3个列。对于每一个主键,作者将开创多个唯壹的集群索引(注意,使用唯一的非聚集索引也足以创制主键)。有关索引的越多消息,请参见http://www
.sqlservercentral.com/stairway/72399/).。最终,对于每种关系,笔者将创建一个外键约束。要开端创设作者的数据库,笔者第三要求创设3个SQL
Server数据库来保存自个儿安插创设的拥有新数据库对象。作者的数据库将被称之为房间预约。小编将应用以下的t

  • sql代码创制本人的数据库

    CREATE DATABASE RoomReservation;

要从自个儿的模型中初阶创设笔者的屋子预约数据库对象,小编将创立表对象。要在sql
server中开创1个表,小编急需运用创立表语句。通过创造表语句,小编将可以定义各类表中的各样表和全体列。上边是创制SQL
Server表的简单语法

CREATE TABLE <table_name> (
<column_definition> [,…N]);

Where:

<table_name> = Name of table
<column_definition> = column_name data_type,[NULL | NOT NULL]

For complete syntax of the CREATE TABLE statement refer to SQL Server
Books Online.

The first table I create will be the Customer table, created using the
code in Listing 1.

USE RoomReservation;
GO
CREATE TABLE dbo.Customer (
    CustomerId INT NOT NULL,
    FirstName NVARCHAR(50) NOT NULL, 
    LastName NVARCHAR(50) NOT NULL,
    Address1 NVARCHAR(100) NOT NULL, 
    Address2 NVARCHAR(100) NULL,
    PhoneNumber NVARCHAR(22) NOT NULL, 
    EmailAddress VARCHAR(100) NULL, 
    City VARCHAR(100) NOT NULL,
    StateProvince NVARCHAR(100) NOT NULL,
    PostalCode NVARCHAR(100) NOT NULL);

 

清单1:创建Customer表

在这段代码中,当自个儿创制自身的Customer表时,我创立了自作者必要的装有列,但本人还点名了在插入或更新记录时,该列是或不是必要二个值。笔者通过在少数列上钦点非空值来落到实处那或多或少,而别的列则钦定为空值。

万一三个列被定义为不为空,那表示你不能够成立一个记下,除非您用五个实际值填充那几个列。而使用空值规范定义二个列意味着您能够创制壹行,而不必为那一个列钦命1个值,只怕另一种形式是,该列允许空值。作者在创造表的讲话上面小编同意列地址二和邮箱地址援助空值,而具备其余的柱子需求值将提供创立八个行时。

本条成立表语句并未完全定义本身的客户表,因为它是在本身上边的关周到据库模型中表示的。小编还要求成立一个主键约束的列ID。这些主键约束将保障该表中一向不三个记录具有同等的客户编号码的值。那几个主键约束将保证该表中未有四个记录具有同样的客户编号码的值。创造主键的代码如清单贰所示

USE RoomReservation;
GO
CREATE TABLE dbo.Customer (
    CustomerId INT NOT NULL CONSTRAINT PK_Customer PRIMARY KEY,
    FirstName NVARCHAR(50) NOT NULL, 
    LastName NVARCHAR(50) NOT NULL,
    Address1 NVARCHAR(100) NOT NULL, 
    Address2 NVARCHAR(100) NULL,
    PhoneNumber NVARCHAR(22) NOT NULL, 
    EmailAddress NVARCHAR(100) NULL, 
    City VARCHAR(100) NOT NULL,
    StateProvince NVARCHAR(100) NOT NULL,
    PostalCode NVARCHAR(100) NOT NULL);

清单2:向客户表添加主键约束
此表语句向客户表添加了主键约束。该主键将在聚集索引命名pk_customer窗体的创建。在翻译SQL语言中,通常有不止一种方法来做同样的事情。另外,我可以通过运行清单3中的创建表语句一次性创建我的客户表和主键。

 

USE RoomReservation;
GO
CREATE TABLE dbo.Customer (
    CustomerId INT NOT NULL CONSTRAINT PK_Customer PRIMARY KEY,
    FirstName NVARCHAR(50) NOT NULL, 
    LastName NVARCHAR(50) NOT NULL,
    Address1 NVARCHAR(100) NOT NULL, 
    Address2 NVARCHAR(100) NULL,
    PhoneNumber NVARCHAR(22) NOT NULL, 
    EmailAddress NVARCHAR(100) NULL, 
    City VARCHAR(100) NOT NULL,
    StateProvince NVARCHAR(100) NOT NULL,
    PostalCode NVARCHAR(100) NOT NULL);
清单3:用主键创建客户表的另一种方法
在这一点上,我已经向您展示了如何创建具有定义主键的表。唯一要展示给您的是如何创建外键约束。但在此之前,让我先向您提供创建上述关系数据库模型中其余表和主键的脚本。您可以在清单4中找到它。

USE RoomReservation;
GO

CREATE TABLE dbo.Reservation (
    ReservationId INT NOT NULL, 
    ArrivalDate DATETIME NOT NULL,
    DepartureDate DATETIME NOT NULL,
    DailyRate SMALLMONEY NOT NULL,
    ReservationStatusID INT NOT NULL,
    CustomerId INT NOT NULL, 
    RoomTypeID INT NOT NULL);

ALTER TABLE dbo.Reservation ADD CONSTRAINT
    PK_Reservation PRIMARY KEY CLUSTERED (ReservationId);

CREATE TABLE dbo.RoomType (
    RoomTypeId INT NOT NULL,
    RoomDesc NVARCHAR(1000) NOT NULL); 

ALTER TABLE dbo.RoomType ADD CONSTRAINT
    PK_RoomType PRIMARY KEY CLUSTERED (RoomTypeId);

CREATE TABLE dbo.ReservationStatus (
    ReservationStatusId INT NOT NULL, 
    ReservationStatusDesc NVARCHAR(50) NOT NULL);

ALTER TABLE dbo.ReservationStatus ADD CONSTRAINT
    PK_ReservationStatus PRIMARY KEY CLUSTERED (ReservationStatusId);

CREATE TABLE dbo.PaymentType (
    PaymentTypeId INT NOT NULL, 
    PaymentTypeDesc NVARCHAR(50) NOT NULL); 

ALTER TABLE dbo.PaymentType ADD CONSTRAINT
    PK_PaymentType PRIMARY KEY CLUSTERED (PaymentTypeId);

CREATE TABLE dbo.CustomerPaymentType (
    PaymentTypeId INT NOT NULL, 
    CustomerId INT NOT NULL, 
    PaymentNotes NVARCHAR(2000) NULL);

ALTER 

相关文章