亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦 > 知識(shí)大全 > 知識(shí)百科 > 百科知識(shí) > 外鍵如何使用

      外鍵如何使用

      時(shí)間: 謝君787 分享

      外鍵如何使用

        外鍵表示了兩個(gè)關(guān)系之間的相關(guān)聯(lián)系。以另一個(gè)關(guān)系的外鍵作主關(guān)鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。以下是由學(xué)習(xí)啦小編整理關(guān)于什么是外鍵的內(nèi)容,希望大家喜歡!

        外鍵的定義

        設(shè)F是基本關(guān)系R的一個(gè)或一組屬性,但不是關(guān)系的鍵,Ks是基本關(guān)系S的主鍵。如果F與Ks相對(duì)應(yīng),則稱F是R的外鍵,并稱基本關(guān)系R為參照關(guān)系,基本關(guān)系S為被參照關(guān)系或目標(biāo)關(guān)系。

        換而言之,如果關(guān)系模式R中的某屬性集不是R的主鍵,而是另一個(gè)關(guān)系R1的主鍵則該屬性集是關(guān)系模式R的外鍵,通常在數(shù)據(jù)庫設(shè)計(jì)中縮寫為FK。

        在實(shí)際操作中,將一個(gè)表的值放入第二個(gè)表來表示關(guān)聯(lián),所使用的值是第一個(gè)表的主鍵值(在必要時(shí)可包括復(fù)合主鍵值)。此時(shí),第二個(gè)表中保存這些值的屬性稱為外鍵(foreign key)。

        注意

        顯然目標(biāo)關(guān)系的主碼和參照關(guān)系的外碼必須定義在一個(gè)或同一組的域上。

        關(guān)系R和S不一定是不同的關(guān)系,即外鍵不一定要與相應(yīng)的主鍵同名。如在學(xué)生(學(xué)號(hào),姓名,性別,專業(yè)號(hào),年齡,班長)關(guān)系中,“學(xué)號(hào)”是主鍵,“班長”屬性表示該學(xué)生所在編輯的班長的學(xué)號(hào),它引用了本關(guān)系中“學(xué)號(hào)”屬性,因此“班長”是外鍵,這里學(xué)生關(guān)系既是參照關(guān)系也是被參照關(guān)系。不過在實(shí)際應(yīng)用中為了便于識(shí)別,當(dāng)主鍵與相應(yīng)的外鍵屬于不同關(guān)系時(shí),往往取相同的名字。

        作用

        保持?jǐn)?shù)據(jù)一致性,完整性,主要目的是控制存儲(chǔ)在外鍵表中的數(shù)據(jù)。 使兩張表形成關(guān)聯(lián),外鍵只能引用外表中的列的值或使用空值。

        如果不使用外鍵,表2的學(xué)號(hào)字段插了一個(gè)值(比如20140999999),但是這個(gè)值在表1中并沒有,這個(gè)時(shí)候,數(shù)據(jù)庫允許插入,并不會(huì)對(duì)插入的數(shù)據(jù)做關(guān)系檢查。然而在設(shè)置外鍵的情況下,你插入表2學(xué)號(hào)字段的值必須要求在表1的學(xué)號(hào)字段能找到。 同時(shí),如果你要?jiǎng)h除表1的某個(gè)學(xué)號(hào)字段,必須保證表2中沒有引用該字段值的列,否則就沒法刪除。這就是所謂的保持?jǐn)?shù)據(jù)的一致性和完整性。如右圖,如果表2還引用表1的某個(gè)學(xué)號(hào),你卻把表1中的這個(gè)學(xué)號(hào)刪了,表2就不知道這個(gè)學(xué)號(hào)對(duì)應(yīng)的學(xué)生是哪個(gè)學(xué)生。

        外鍵的使用方法

        主鍵表和外建表:

        使用設(shè)計(jì)界面創(chuàng)建外鍵時(shí),出現(xiàn)主鍵表和外建表問題,上述使個(gè)人理解有誤:

        CREATE TABLE TABLE1

        (

        [ID] INT IDENTITY(1,1) PRIMARY KEY

        )

        GO

        CREATE TABLE TABLE2

        (

        [ID] INT NOT NULL,

        FOREIGN KEY ([ID]) REFERENCES [TABLE1]([ID])

        )

        GO

        TABLE2 中引用了TABLE1,在此TABLE1為主鍵表,而TABLE2 為外鍵表。

        總結(jié):主鍵表是被引用的表,外鍵表是引用其他表的表。

        外鍵的有效性

        有很多時(shí)候,程序員會(huì)發(fā)現(xiàn)字段缺少、多余問題或者是創(chuàng)建外鍵以后就不能添加沒有受約束的行[特殊情況下是有必要的],這個(gè)時(shí)候不想對(duì)表結(jié)構(gòu)進(jìn)行操作,就可以使用約束失效。

        以 Northwind 為例:想給產(chǎn)品表【Products表】添加一條不受種類表【Categories表】限制的數(shù)據(jù)??梢允巩a(chǎn)品表中的 Categories 約束失效。

        寫法:ALTER TABLE dbo.Products NOCHECKCONSTRAINT FK_Products_Categories

        添加完成后再使其有效:

        ALTER TABLE dbo.Products CHECK CONSTRAINT FK_Products_Categories

        這樣就完成不受某表約束的數(shù)據(jù)添加了。

        還有一個(gè)好處是:如上述例子。修改 Categories 表時(shí) 添加字段時(shí) 要把所有引用 Categories 表的外鍵給失效。等給 Categories 表添加字段完成后再使所有應(yīng)用 Categories 表的外鍵恢復(fù)有效性即可。
      看過“外鍵如何使用”的人還看了:

      1.數(shù)據(jù)庫中外鍵的用法

      2.信息管理信息系統(tǒng)專業(yè)論文

      3.CCNA專業(yè)語匯中英對(duì)照

      4.餐飲管理系統(tǒng)設(shè)計(jì)論文

      5.c語言string的用法

      2119402