www.日本精品,久久中文视频,中文字幕第一页在线播放,香蕉视频免费网站,老湿机一区午夜精品免费福利,91久久综合精品国产丝袜长腿,欧美日韩视频精品一区二区

【CREATE。裕粒拢蹋排c關系】 中國式關系

發(fā)布時間:2020-02-16 來源: 歷史回眸 點擊:

  收稿日期:2006-09-10?   作者簡介:蔣景行(1945-),男,湖南邵陽人,武漢科技大學中南分校信息工程學院高級工程師。?  。ㄎ錆h科技大學中南分校 信息工程學院,湖北 武漢 430223)?
  摘要:關系數據庫的建表命令CREATE TABLE常被去掉可選項而使用,這種用法存在功能上的不足。本文從數學上關系的性質出發(fā),說明數據庫的建表命令CREATE TABLE必須帶上可選項PRIMARY KEY才能建立起來關系,亦即PRIMARY KEY是CREATE TABLE的不可不選的選項。?
  關鍵詞:數據庫;SQL;建表?
  中圖分類號:TP311.13文獻標識碼:A??
  
  CREATE TABLE是關系數據庫的建表命令。關系數據庫基于集合論中的關系,數學上稱為關系、數據庫里稱為表。所以建表就是建立關系。?
  
  一、關系及其行列性質?
  
  關系是集合的笛卡兒乘積的子集。?
  設有學生屬性集合:?
  姓名={張三,李四,王嫵}?
  性別={男,女}?
  年齡={18,19}?
  籍貫={湖南,湖北,江西}?
  姓名×性別×年齡×籍貫是它們的一個笛卡兒乘積:?
  張三 男 18 湖南?
  張三 男 18 湖北?
  張三 男 18 江西?
  張三 男 19 湖南?
  張三 男 19 湖北?
  張三 男 19 江西?
  張三 女 18 湖南?
  張三 女 18 湖北?
  張三 女 18 江西?
  張三 女 19 湖南?
  張三 女 19 湖北?
  張三 女 19 江西?
  李四 男 18 湖南?
  李四 男 18 湖北?
  李四 男 18 江西?
  李四 男 19 湖南?
  李四 男 19 湖北?
  李四 男 19 江西?
  李四 女 18 湖南?
  李四 女 18 湖北?
  李四 女 18 江西?
  李四 女 19 湖南?
  李四 女 19 湖北?
  李四 女 19 江西?
  王嫵 男 18 湖南?
  王嫵 男 18 湖北?
  王嫵 男 18 江西?
  王嫵 男 19 湖南?
  王嫵 男 19 湖北?
  王嫵 男 19 江西?
  王嫵 女 18 湖南?
  王嫵 女 18 湖北?
  王嫵 女 18 江西?
  王嫵 女 19 湖南?
  王嫵 女 19 湖北?
  王嫵 女 19 江西?
  該乘積包含了這4個屬性各元素按照姓名―性別―年齡―籍貫順序的所有可能的組合。一個組合稱為一個元組(屬性元素的組合),所有元組構成一個集合。笛卡兒乘積排成單純的行列,屬性也稱為列,元組也稱為行。?
  
 。ㄒ唬╆P系無重復行?
  笛卡兒乘積的子集有很多個。一行是子集,多行也是、全部行也是,它們稱為關系。例如:?
  張三 男 19 江西?
  李四 男 18 湖北?
  王嫵 女 18 湖南?
  當然,下面也是一個關系:?
  張三 男 19 江西?
  李四 男 18 湖北?
  王嫵 女 18 湖南?
  李四 男 18 江西?
  這個關系里含有兩個名叫李四的學生,都是18歲的男生,但一個是湖北人、一個是江西人。?
  極端地說,整個笛卡兒乘積也是一個關系。關系里含有12個名叫張三的學生:一個18歲的男湖南人、一個18歲的男湖北人、一個18歲的男江西人、……,還有一個19歲的女江西人。李四、王嫵也一樣。?
  很明顯,笛卡兒乘積無重復行;關系自然也無重復行。無重復行是關系的一個重要性質。?
  事物由它的屬性表征。關系的第一行表征一個19歲的男性江西學生名叫張三,每一行表征一個學生;行行不同,這就構成一張實用的二維學生表。?
  
 。ǘ⿲嵱枚S表都可以用關系來構造?
  上面的笛卡兒乘積中只有一個18歲的男湖南張三、而沒有第二個。那么,一個含有兩個18歲的男湖南張三的關系,怎樣去構造呢?增加一個屬性集合,例如學號={901,902,903,904},從姓名、性別、年齡、籍貫、學號這5個集合的笛卡兒乘積中選取子集;那里面有4個18歲的男湖南張三、但學號彼此不同,分別是901、902、903、904。?
  一般地說,屬性集合:?
  姓名={姓名|可用作姓名的字符串}?
  性別={性別|男/女}?
  年齡={年齡|自然數}?
  籍貫={籍貫|現用地名字符串}?
  可以構造出所有具有這4個屬性的任何學生關系。?
  于是,關系被作為存儲同類事物個體的模型。?
  
  二、CREATE TABLE命令?
  
  關系由集合的元素結構而成,每一行都按照統(tǒng)一的順序從各個集合里取出一個元素,兩行之間至少有一個元素不同。對行的結構的說明,即對構成關系的各集合的名稱、類型、順序、以及集合之間的關系等的說明,稱為關系模式,形象地說就是二維表的表頭。按照關系模式存入的數據便結構成關系,在表頭下填入的數據便結構成關系。?
  數據庫建立關系分為兩步:用CREATE TABLE命令建立關系模式,然后用INSERT命令輸入數據。所輸入的數據便結構成關系。?
  在標準語言SQL99中,CREATE TABLE命令的語法格式如下(各管理系統(tǒng)大同小異):?
  CREATE \[{GLOBAL|LOCAL} TEMPORARY\] TABLE <table_name>?
 。?
  <column_name>{<domain_name>|<datatype>\[<size1>\[,<size2>\]\]}?
  \[<column_constraint>,…\]?
  \[DEFAULT<default_value>\]?
  \[COLLATE<collation_name>\],…?
  \[<table_constraints>\]?
  \[ON COMMIT{DELETE|PRESERVE}ROWS\]?
 。?
  命令包括兩大功能部分。前面的<column_name>必選項部分,定義關系名與各列的屬性,即安排橫向列、同時檢測列不重名(后輸入的屬性如果與已輸入的屬性重名則提示錯誤)。后面的諸多可選項部分,定義關系的完整性約束;檢測行不重復的功能項primary key包含在\[<column_constraint>,…\]、\[<table_constraints>\]里面。兩大功能是一個整體。?
  從建立關系的角度來說,使用這個命令至少要選取primary key一項如下:?
 。茫遥牛粒裕拧。裕粒拢蹋牛迹簦幔猓欤澹撸睿幔恚澹?
 。ǎ迹悖铮欤酰恚睿撸睿幔恚澹荆迹洌幔簦幔簦穑澹荆埽郏迹螅椋澹保荆埽郏迹螅椋澹玻荆埽荩埽?
 。埽郏迹悖铮欤酰恚睿撸睿幔恚澹荆迹洌幔簦幔簦穑澹荆埽郏迹螅椋澹保荆埽,<size2>\]\]}…\]?
  ,primary key(<primary。耄澹荆?
 。?
  
  三、命令的簡便形式及其功能之不足?
  
  形式上,CREATE TABLE命令有多個必選項和可選項?蛇x項可選可不選,于是便有了去掉可選項的簡便形式:?
  CREATE\[{GLOBAL|LOCAL}TEMPORARY\]TABLE<table_name>?
 。?
 。糲olumn_name>{<domain_name>|?
 。糳atatype>\[<size1>\[,<size2>\]\]}?
  )?
  這個形式常常被引用來建表,特別是舉例的時候,例如一本教科書的敘述:?
  ?
  基本表的創(chuàng)建語句的基本形式為:?
  CREATE TABLE table_name?
 。–ol_name1 Type1 \[NOT NULL/NULL\]?
  \[{,Col_name2 Type2 \[NOT NULL/NULL\]}…\]?
  )?
  例:創(chuàng)建下面的學生表:?
  學號  姓 名  性 別  籍貫?
  0901  張小強   男   湖南?
  0902  李 哲   男   江西?
  0903  馮 姍   女   湖南?
  CREATE TABLE 學生表?
 。▽W號 CHAR(4),姓名 CHAR(8),性別 CHAR(2),籍貫 CHAR(6))?
  ?
  當然,這個命令能夠生成例中的學生表;但是它也能夠生成具有重復記錄的下面這張表:?
  學號  姓 名  性別  籍貫?
  0901  張小強  男   湖南?
  0902  李 哲  男   江西?
  0903  馮 姍  女   湖南?
  0902  李 哲  男   江西?
  這是學生表加上一條重復記錄。顯然,這張表不是關系。?
  用命令統(tǒng)計這張表的記錄條數,結果是4;插入記錄完全自由,再插入一條李哲的記錄也可以;修改李哲的籍貫,兩條李哲記錄的籍貫都被修改;刪除李哲,兩條李哲的記錄都被刪除。可見,在統(tǒng)計、插入、修改、刪除的過程中,RDBMS并不檢測所操作的表是關系還是不是關系;就過程本身而言,操作關系得到關系的結果,操作非關系得到非關系的結果。?
  要是使用SQL Server界面修改李哲的籍貫和刪除李哲的記錄,則不允許進行,想改變表中記錄重復的現狀還做不到。(不使用命令的話,這張表豈不只能作廢?)?
  能夠生成不是關系的表體現了簡便形式的功能不足。簡便形式能夠完善地定義屬性列、卻不能檢測重復的元組行,它缺少定義主鍵的功能。?
  雖然在進一步將學生表作為另一張表(譬如成績表)的參照對象、而建立兩表聯系的時候,系統(tǒng)的參照完整性規(guī)則會要求它設置主鍵;而一旦設置主鍵,學生表就會受到規(guī)范。但是,一開始就建立規(guī)范的關系才是正確的選擇。?
  雖然使用簡便形式建立模式、在輸入記錄的時候注意不讓它重復,也能建立起關系;但是,記錄量一大就難以做到,同時手誤也是難以避免的。?
  關系數據庫的基礎是關系,操作對象是關系、操作結果也是關系,所以,使用CREATE TABLE命令建立的應該是關系。這理所當然。特別是訓練學生使用CREATE TABLE命令,為養(yǎng)成良好的、科學的習慣,當以建立關系為上。具體到前面的例題,最好使用下面的命令:?
  CREATE TABLE 學生表?
 。ㄐ 名 char(8),性別 char(2),年齡 int,籍貫 char(4),primary key (姓名))?
  
  參考文獻?
  [1]陳洛資.數據庫系統(tǒng)及應用基礎[M].北京:北方交通大學出版社,2002.?
  [2]孔璐,吳志堅,顧洪.數據庫原理與開發(fā)應用技術[M].北京:國防工業(yè)出版社,2004.?
  [3]關敬敏,沈立強,李莉.SQL Server數據庫應用教程[M].北京:清華大學出版社,2005.?
  [4][美]Alex Kriegel,Boris M.Trukhno著,陳冰等譯.SQL寶典[G].北京:電子工業(yè)出版社,2003.?
  [5][美]Paul Nielsen著,劉瑞,陳微,閆繼忠,劉文等譯,SQL Server 2000寶典[G].北京:中國鐵道出版社,2004.?
  [6][美]Robert Sheldon著,黃開枝,冉曉?等譯.SQL實用教程[M].北京:清華大學出版社,2004.?

相關熱詞搜索:關系 CREATE TABLE CREATE TABLE與關系 create table語句 sql create table

版權所有 蒲公英文摘 www.newchangjing.com