化学答案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数据库。在起来创办数据库在此以前,首先让笔者介绍一下提到模型的创小编的片段历史。

 

关全面据建立模型之父

 

关全面据库设计的概念首先由Edgar F建议。.
在1九陆7年,Codd发布故事集的标题为“大型共享数据银行的数量涉嫌模型”。
Codd在IBM工作时支付了那种建立模型理论。BM在Codd的数目建模概念上跳得不够快,由此并不是第二个供应关全面据库引擎的供应商,它利用了Codd的新关周全据建立模型理论。Codd的涉嫌建立模型概念将来是用来在SQL
Server和任何关全面据库引擎中开创关周全据库的框架。Codd出生于苏格兰的埃里温岛,在加入皇家陆军在此以前学习了数学和化学,成为了第二次世界大战的试飞员一玖四玖年,他搬到London,发轫在IBM工作,在那里她是一名数学程序员。他漂流了一点年,最终搬到加州,在IBMSan Jose商量实验室工作。直到20世纪90年份,当他的健康情况倒霉迫使他退休时,Codd继续全力健全并证实了关周详据模型的合理性。200叁年二月二十四日,Codd离世,享年76虚岁。

 

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

 

那些阶梯不是用来教您关周全据建立模型,或数据库设计,而是教你什么样从二个事关模型创立3个SQL
Server数据库。然则在自家为创制SQL
Server数据库提供代码块在此之前,大家首先要求探索三个将被达成的关周详据模型。我的简练模型将含有部分实体(数据表),其中有主键定义和见仁见智实体之间的局地涉嫌(外键约束)。

 

自家的简要的涉及模型将是三个回顾的饭馆预定系统。这些预约系统必要跟踪客户订购音信。图1表达了那些差不离的涉嫌模型,作者将使用t

  • sql实现它:

化学答案 1

经过回看那一个模型,您能够看出它包蕴众多实体(由方框代表)来跟踪预约相关信息。每一种实体都由局地性质(列)组成,当中3个或多个属性被标识为主键(粗体和下划线的称呼)。也意味着实体之间的有的涉及(以箭头表示),以呈现分裂的实体之间是何等互相关联的。笔者将利用实体、属性、主键和关系的模子,然后开发五个物理SQL
Server数据库,它代表此提到模型的设计。要从这几个模型营造物理数据库,大家须要在SQL
Server中分辨基于此模型定义的两样目的。对于图第11中学的每种实体或框,作者将在SQL
Server中创设四个表。对于每一种实体的种种属性,作者将在关乎的表中创立二个列。对于各类主键,小编将创造四个唯1的集群索引(注意,使用唯1的非聚集索引也足以创造主键)。有关索引的更多消息,请参见http://www
.sqlservercentral.com/stairway/72399/).。最终,对于各种关系,作者将创造二个外键约束。要开首营造小编的数据库,作者第一供给创建三个SQL
Server数据库来保存自己安排创制的拥有新数据库对象。笔者的数据库将被叫做房间预约。小编将动用以下的t

  • sql代码成立本身的数据库

    CREATE DATABASE RoomReservation;

要从自作者的模子中初叶构建作者的屋子预定数据库对象,笔者将创设表对象。要在sql
server中开创3个表,小编急需采用创立表语句。通过创建表语句,作者将能够定义每一个表中的每一个表和全部列。上面是创办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个列被定义为不为空,那表示你不可能创造二个记下,除非您用一个实际值填充那个列。而利用空值规范定义二个列意味着您可以创建1行,而毋庸为那几个列内定一个值,恐怕另一种方法是,该列允许空值。小编在成立表的口舌上边作者同意列地址贰和邮箱地址支持空值,而具有其余的柱子须求值将提供创制3个行时。

其壹创设表语句并不曾完全定义本人的客户表,因为它是在作者上边的关周全据库模型中象征的。小编还供给成立2个主键约束的列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 
admin

网站地图xml地图