八宝书库 > 文学其他电子书 > SQL 21日自学通(V3.0)(PDF格式) >

第39部分

SQL 21日自学通(V3.0)(PDF格式)-第39部分

小说: SQL 21日自学通(V3.0)(PDF格式) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






   l  数据库的设计意图  谁将会使用它 



   l  数据库的自身资料   用什么创建的数据库  数据库的大小是多少       日志文件的尺 



     寸是多少  在一些 RDBMS  中它存储着数据库的操作信息 



   l  任何数据库安装或反安装的 SQL  原代码记录  包括导入/导出数据库的文档资料 



     记录  就像第八天所说的那样 



                                                 178 


…………………………………………………………Page 179……………………………………………………………

SQL 21  日自学通(V1。0)                                  翻译人  笨猪 



   l  对每一个表的详细描述以及它的最终目的是什么 



   l  每一个表的内部结构的资料        包括表中的所有字段      数据类型以及注释情况以及 



      所有的索引和所有的视图        见第 10 天  创建视图及索引 



   l  对于每一个存储过程的原代码和触发机制 



   l  说明数据库是否具有唯一值及非空值约束  并说明这些约束是关系型数据库管理 



      系统强加的还是数据库编制人员设定的          以及约束在原代码中的作用范围 



   许多计算机辅助软件工程工具会在建立数据字典的过程中为你提供帮助                     例如 



MicroSoft  Access 在将数据库打包会生成一个文档  在文档中对数据库中的每一个细节都进 



行了详细的描述  在第 17 天中的  使用 SQL 来生成 SQL 语句      中你了解数据字典的详细 



内容 



   注  大多数 RDBMS  中都提供了生成数据字典的工具包或有说明来告诉你如何安装它 



建立关键字段 



   在接下来的数据库设计工作中         最主要的目标就是建立你的表的结构         它包括主关键 



字和外关键字     其中主关键字用于完成下列目标 



   保证表中的第一条记录都是唯一的          没有一条记录的内容完全与另一条相同  至少主 



键不能相同 



   对于一个特定的记录      它的所有的列都是必须的       列的内容不应出现重复 



   在第二个目标中     如果列的内容在表中从头至尾都没有重复           那它就是主关键字      外 



关键字则是在自己的关系中不唯一标识记录; 但在其它关系中可用作对匹配字段链接的一种 



关键字   下边的例子可以帮助你来区分这两种情况 



   假定你有三个表  BILLS    BANK_ACCOUNTS PANY  它们的结构如下 



   Table 9。1。 Table structure for the PAYMENTS database。 



   Bills              Bank_Accounts      pany 



   NAME; CHAR(30)     ACCOUNT_ID; NUMBER NAME; CHAR(30) 



   AMOUNT; NUMBER     TYPE; CHAR(30)     ADDRESS; CHAR(50) 



   ACCOUNT_ID; NUMBER BALANCE; NUMBER    CITY; CHAR(20) 



                      BANK; CHAR(30)     STATE; CHAR(2) 



   在 Bills 表中的主关键字段为 NAME   字段  这一字段是没有重复的       因为你只可能有 



一个支票的来对应 AMOUNT      实际上你可能通过支票号以及日期来保证它的唯一性              但 



                                                         179 


…………………………………………………………Page 180……………………………………………………………

  SQL 21  日自学通(V1。0)                                            翻译人   笨猪 



  在这里我们假定 NAME 就能做到这一点              而 ACCOUNT_ID  字段则是 BANK_ACCOUNT 



  的主关键字  PANY 表中的 NAME 字段是主关键字 



      在本例中外部关键字应该是很容易发现的                    在 BILL  表中的 ACCOUNT_ID     与 



  BANK_ACCOUNT  表相关连      而 NAME 字段则将 BILL 表与 PANY 表相关连           如果 



  这是一个完备的数据库            你可能会有更多的表和数据分类                 例如    BANK  字段在 



  BANK_ACCOUNT    表中可以说明一个银行的信息如地址和电话号码等                    PANY 表可 



  以与其它表或  数据库事件  相关连以得到公司及有关产品的信息 



  例 9。1 



      同样用BILLS    BANK_ACCOUNTS  和 PANY 表     我们来看一个不正确的数据库 



  设计 初学者可能犯的错误就是不会正确地对数据进行尽可能的逻辑分组 一个不好的 BILL 



  设计如下 



Column Names          ments 



NAME   CHAR(30)       Name of pany that bill is owed to 



AMOUNT    NUMBER      Amount of bill in dollars 



ACCOUNT_ID   NUMBER   Bank account number of bill (linked to BANK_ACCOUNTS table) 



ADDRESS   CHAR(30)    Address of pany that bill is owed to 



CITY  CHAR(15)        City of pany that bill is owed to 



STATE  CHAR(2)        State of pany that bill is owed to 



      结果看上去是正确的 但是这只是在数据输入的开始时 在几个月以后 你已经在NAME 



  字段中输入了许多公司的账单               每当向 BILL    表中加入一个新记录的时候             公司的 



  ADDRESS   CITY  以及 STATE  就有可能出现重复        当记录增加到成千上万时重复的数据 



  也在相应的增加  类似的情况也可能在 10              20  或 30 个表中出现    你现在知道数据库标准 



  化设计的重要性了吧 



      在你向表中输入数据之前          你应该知道如何来创建一个表 



  CREATE TABLE 语句 



      建立表的过程比建立数据库的过程更不标准  它的基本语法如下 



      SYNTAX 



      CREATE TABLE table_name  (field1 datatype ' NOT NULL ' 



                                field2 datatype ' NOT NULL ' 



                                                                      180 


…………………………………………………………Page 181……………………………………………………………

SQL 21  日自学通(V1。0)                                         翻译人   笨猪 



                             field3 datatype ' NOT NULL '。。。) 



   它的一个简单的例子如下 



   INPUT/OUTPUT 



   SQL》CREATE TABLE BILLS ( 



       2      NAME  CHAR(30) 



       3      AMOUNT  NUMBER 



     4   ACCOUNT_ID NUMBER) 



   Table created。 



   分析 



   该语句创建了一个名字叫 BILL  的表  在 BILL 表中有三个字段  NAME               ACCOUNT 



和 ACCOUNT_ID   其中 NAME 字段为字符类型可以存储长度 30  的字符串  而 AMOUNT 



和 AMOUNT_ID 则只参存储数字 



   下边的部分对 CREATE TABLE 命令作进一步的解释 



表名 



    当使用 PERSONAL  ORACLE   来创建一个表的时候  对表的命名要遵从几个约束                首 



先  表的名字不得超过 30  个字符长         由于 ORACLE 对大小写不敏感        所以在写名字时你 



可以根据需要采用大写或小写的方式             但是表的第一个字符必须是字母            A…Z   其余的字 



符则还可以有下划线        #    @  当然   在本工程中表的名字不应该有重复             表的名字也 



不可以是 ORACLE 的保留字  如 SELECT 



注  你可以在不同的所有者或工程中使用相同的表的名字  但在同一个工程中表的名字必 



   须保证唯一 



FIRST NAME 



   如果你有过用任何一种语言进编程的经验                你会有类似的关于数据类型的概念            指定 



的字段只能存放特定的数据类型  例如             字符型字段只能存放字符型数据类型             表 9。2 显 



示了 ORACLE 支持的数据类型 



   ORACLE 所支持的数据类型 



                                                                 181 


…………………………………………………………Page 182……………………………………………………………

   SQL 21  日自学通(V1。0)                                   翻译人  笨猪 



  数据类型                          说               明 



CHAR       可以存储长度为 1~255 个字符的字符串       空格会被填充到字符串的右边以保 



           证其内容满足定义的长度 



DATE       包括日期的世纪     年  月  日时  分  秒 



LONG       可以支持长达 2G  的字符串  见下注 



LONG RAW   可以存储长达 2G  的二进制内容  见下注 



NUMBER     零  正值或负值的定点或浮点数 



RAW        可以存储长不过 255 个字节的二进制代码 



ROWID      用一个十六进制的数来标明当前行在表内的唯一地址             见下注 



VARCHAR2   变长的字母或数字     长度可以从 1 到 2000 



   注  LONG 数据类型在其它的数据库系统中常被称为备注类型  它主要用于存储大量的可 



      以在稍后返回的文本内容 



        LONG  RAW 类型在其它数据库系统中常被称为大二进制类型            BLOB   它可以用 



   来存储图形     声音  视频数据    尽管关系型数据库管理系统最初不是为它们而设计的              但 



   是多媒体数据可以存储在 BLOB       或 LONG RAW  类型的字段内 



        ROWID 常用在可以将你的表中的每一条记录都加以唯一标识的场合  许多关系型 



   数据库管理系统用 COUNTER      如 ACCESS 或 IDENTITY SQL  SERVER 来表达这个 



   概念 



      注  请检查你的解释器看它们是否对数据类型的支持有所变化 



   空值属性 



      SQL  也可以让你鉴别在一个列中是否已经存入的数值  NULL          只是一个修饰     因为如 



   果一个字段的内容为 NULL 的话实际上是说这个字段中没有东西也没有 



      在建立表的时候      大多数数据库管理系统允许你用 NOT NULL 来指明字段是否为非空 



   属性  NOT  NULL  的意思就是在当前表的该字段中不能有任何记录存在空值  也就是说在 



   当前表中的该字段的每一个记录中都应该确实存在数值  下例给出了 NOT NULL  的用法 



      INPUT 



      SQL》CREATE TABLE BILLS ( 



        2      NAME  CHAR(30)  NOT  NULL; 



                                                             182 


…………………………………………………………Page 183……………………………………………………………

SQL 21  日自学通(V1。0)                                        翻译人   笨猪 



     3      AMOUNT  NUMBER; 



     4      ACCOUNT_ID  NOT  NULL); 



分析 



   在这个例子中如果你想把公司的账转到你自己的名下 如果 NAME 区和 ACCOUNT_ID 



区没有内容  那么这种存储是没有任何意义的  你也许可以在记录中给出账单号  但是你 



无法收取 



   下例中的第一个语句插入正确的数据以便为支付 JOE  的25  电脑服务费 



INPUT/OUTPUT 



   SQL》 INSERT INTO BILLS VALUES(〃Joe's puter Service〃; 25; 1) 



    1 row inserted。 



INPUT/OUTPUT 



   SQL》 INSERT INTO BILLS VALUES(〃〃; 25000; 1) 



    1 row inserted。 



分析 



   注意  在上边的第二个例子中没有给出 NAME  的名字               你也许会认为这是一件好事 



因为没有收款人却收取了 25000  元  但是我们不这样认为              如果 NAME   字段在创建时指 



定的非空属性  那么在第二个例子中就会产生一个错误 



唯一属性 



   你在设计表时的一个目标是要保证在表中有一个列的值是唯一的  这列或这个字段被 



称为主关键字      在一些数据库管理系统中允许你将某一列设成唯一值属性                   如 ORACLE 和 



SQL  Server 可以让你对一个字段加以唯一值索引  见第 10  天            这一特性可以保证你不 



在该字段中插入重复的数值 



   在选择主关键字段时有几个需要注意的问题                我们曾经说过      ORACLE  提供了一个 



ROWID  字段   它对于每一行均会自动递增          因此默认情况下它总是一个唯一的数值              将 



ROWID  字段作为主关键字有许多理由           首先   对于整数值的归并操作要远远快于对一个 



返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的