《MS SQL Server 2000管理员手册》系列——10. 建立数据库数据表[3]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

 
 
图10-6 删除使用中的数据型别所出现的错误讯息
5. 如果欲删除的数据型别没有相依性方面的问题,就可以关闭相依性对话框,按一下 卸除对象 窗口中的 卸除全部 ,即删除数据型别。不用担心, 卸除全部 指的是删除 卸除对象 窗口中显示的数据型别,而不是所有的使用者自订数据型别。
使用 T-SQL 建立及删除使用者自订数据型别
 
系统预存程序 sp_addtype 是用来定义使用者数据型别的 T-SQL 命令。当使用 model 数据库时,执行此命令,就会让所有新建立的使用者自订数据库都使用这个新的数据型别(因为所建立的使用者自订数据型别都和model数据库的属性相同)。当您利用使用者自订的数据库时执行此命令时,只会让该数据库使用新的数据型别。(记住,要使用某一个数据库,必须执行执行 USE database_name 命令。)下面的 T-SQL 命令在 model 数据库中建立了一个使用者自订数据型态:Brand_type。
USE model
GO
sp_addtype Brand_type, 'smallint', 'NOT NULL'
GO
sp_addtype 的三个参数分别为:使用者自订数据型别名称、新数据型别以何种系统数据型别为基础,及新数据型别的 Null 值属性。新数据型别 Brand_type 将出现在所有使用者自订的数据库中。如果在使用者数据库中建立了使用者自订数据型别,并要在 Enterprise Manager 中看到该型别,请在 Enterprise Manager 的执行菜单上选择 重新整理 。
要删除一个未被使用的使用者自订数据型别,在定义它的数据库中执行 sp_droptype 命令。以下示范从 model 数据库中删除 Brand_type 这个使用者自订的型别:
USE model
GO
sp_droptype Brand_type
GO
使用使用者自订数据型别别建立 Product_Info 与 Brand数据表
 
先回到数据库数据表的范例。利用自订的数据型别- Brand_type ,重新建立 Product_Info 数据表,然后再建立 Brand 数据表。在 Brand 数据表和 Product_Info 数据表中都会有 Brand_ID 这个数据行,我们会用相同的使用者自订型别。首先,先删除旧的 Product_Info 数据表,然后重新建立,步骤如下:
USE MyDB
GO
DROP TABLE Product_Info
GO
CREATE TABLE Product_Info
(
Product_ID smallint,
Product_Name char(20),
Description char(30),
Price smallmoney,
Brand_ID Brand_type
)
GO
CREATE TABLE Brand
(
Brand_ID Brand_type,
Brand_Name char(30),
Supplier_ID smallint
)
GO
将 Brand_type 这个数据型别指定到两个数据表中的 Brand_ID 数据行,就可确定两个数据行有一样的属性,而无须记住基底数据型别。
通常需要记住使用者自订型别数据的就是 DBA 和应用程序的程序设计师。DBA 不用说当然要了解这些,程序设计师则在写程序代码时可能需要知道数据型别,至于使用者则不需要知道这些细节。
在档案群组中建立数据表
 
如果您已经建立了使用者定义档案群组,SQL Server 可让您指定数据表和数据储存在哪一个档案群组中。预设情况下,除非另一个档案群组被指定为预设档案群组,否则数据表会储存在主要档案群组中。档案群组可以横跨多个磁盘或磁盘阵列上。要详细了解数据表的数据如何存放在档案和档案群组中,请参阅 第9章 。
在档案群组中建立 Product_Info 数据表
 
假设我们在 MyDB 数据库中建立一个命名为 Product_group 的档案群组,这个档案群组放置在次要档案群组所在的E磁盘中,而主要档案群组则在C磁盘中。这个技巧可让我们将数据及数据表和 SQL Server 系统数据表分开放置。我们还将在磁盘F建立一个记录文件,以分开记录文件I/O(请参阅本书 第9章 利用档案群组建立数据库)。
USE master
GO
CREAT DATABASE MyDB
ON PRIMARY                      --清楚定义主要档案群组(选择性)
           --主要数据文件 
(NAME = MyDBroot,                
FILENAME = 'c:\mssq12k\MSSQL\data\mydbroot.mdf'
SIZE = 8MB,
MAXSIZE = 10MB,
FILEGROWTH = 1MB),
FILEGROUP product_group         --下一个档案储存的档案群组
(NAME = MyDBdata1,              --次要数据文件
FILENAME = 'e:\mssq12k\MSSQL\data\mydbdata1.ndf',
SIZE = 100MB,
MAXSIZE = 1500MB,
FILEGROWTH = 100MB)
LOG ON
(NAME = Logdata1,            --记录文件
FILENAME = 'f:\long_files\logdata1.ldf',
SIZE = 100MB
MAXSIZE = 1500MB,
FILEGROWTH = 100MB)
GO
现在您可以使用 CREATE TABLE 命令,将 Product_Info 数据表建立在 product_group 档案群组内,方法如下:
USE MyDB
GO
CREATE TABLE Product_Info
(
Product_ID smallint,
Product_Name char(20),
Description char(30),
Price smallmoney,
Brand_ID brand_type
)
on product_group
GO
新增的数据表及所有插入数据表的数据都会放置在定义 Product_group 的E磁盘,因此,只要在同样的档案群组内没有建立其它的数据表, Product_Info 数据表中数据的I/O就有一个专门的磁盘。
使用 Null 值
 
 空值 (Null value)是指未知的值,我们将这样的值称为 Null 。数据行的 Null值属性 是指该数据行是否接受或拒绝Null值。一个数据行中的Null值通常表示该数据行中没有值输入,可能因为这个值未知的、不适用的、或是以后才要新增。Null 值既不是没有这个值,也不是0;它们的实际值是未知的。因此,任何两个 Null 值永远不会相等。
那么何时会用到 Null 值呢?举例来说,当客户不能提供所有数据列的信息时,就需要 Null 值。例如,客户的网址,也许客户并没有网址,这个数据列就无法输入数据,这时一个数据列中的 Null 值就有了意义,也就是说现在这个数据列的数据尚未决定。
就一般的规则而言,尽可能避免使用 Null 值,因为这会增加查询和更新时的复杂度,而且有些选项(如主索引键和 IDENTITY 属性)不可在包含 Null 值的数据列中使用。
________________________________________
相关信息
在 SQL Server《在线丛书》,输入『Null值』这个关键词,在清单中选取 比较搜寻条件 即可找到相关信息。或是在本章 〈增加IDENTITY属性〉 一节有提到更多的相关信息。
________________________________________
您可以为数据行指定默认值以避免使用 NULL,所以如果一个数据行没有输入值,该数据行中就会自动填入默认值。(关于默认值的详细信息请参看 第16章 。)如果在一个数据行中允许空值, NULL将以两种方法输入该数据行:
•  如果在数据表中插入一数据列,但未对该空数据列指定数据值,SQL Server会为该数据行指定为 NULL值(除非该数据行已指定默认值)。
 
•  使用者可以手动输入 NULL这个字。请注意,不要输入引号("),以免被当作字符串NULL而造成混淆。
 
使用 NULL 建立 Product_Info 数据表
 
回到 Product_Info 数据表的范例,现在为每一个数据行增加空值选项。如果想让某一数据行允许Null值,请在数据型别后新增 NULL。如果不想允许Null值,则在数据型别后新增 NOT NULL。除非在使用使用者自订数据型别,且该数据型别已有定义 NULL或 NOT NULL,否则为数据行指定是否允许Null值是不错的习惯。这样可帮助您每次在设定一个数据行时都考虑到该数据行的Null值属性。
________________________________________
相关信息
在 SQL Server《在线丛书》,输入『CREATE TABLE』,向下寻找 数据表定义中的空值属性规则 主题,即可找到当 NULL或 NOT NULL 不明确指定时,数据行NULL值属性会遵照的规则。
________________________________________
回到 Product_Info 数据表的范例,替产品描述这个数据列定义接受Null值。由于 Brand_type 数据型别在之前已定义为 NOT NULL,因此不需替 brand_type 数据型别指定Null值属性。新的CREATE TABLE命令如下:
USE MyDB
GO
DROP TABLE Product_Info

本文关键:《MS SQL Server 2000管理员手册》系列——10. 建立数据库数据表
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top