《視圖更新與關系數據庫理論》——2.1 關系和關系變量

本節書摘來自異步社區出版社《視圖更新與關系數據庫理論》一書中的第2章,第2.1節,作者:【美】C.J. Date(達特),更多章節內容可以訪問云棲社區“異步社區”公眾號查看。

2.1 關系和關系變量

每一個關系都有一個“關系頭”和一個“關系體”,其中關系頭是一系列狀態和特征,而關系體則是符合關系頭的一系列數組。讓我們再次使用“供應商與零部件”數據庫(如圖2.1所示,與第1章的圖1.1完全一樣),供應商關系的關系頭是{SNO CHAR, SNAME CHAR, STATUS INTEGER, CITY CHAR}的集合,我們假設在這里確定屬性SNO、SNAME、STATUS和CITY分別被定義為CHAR、CHAR、INTEGER和CHAR這幾種數據類型,而這個關系的關系體是對于供應商S1、S2、S3、S4和S5的數組的集合。這里要注意,每個數組都符合特定對應的關系頭的要求,因為它們每個都只包含一個值,分別對應屬性SNO、SNAME、STATUS和CITY(并且沒有其他內容)。注意:其實更準確,也是更正確的說法應該是每個數組都“擁有”特定對應的關系頭,因為在一個關系中,數組是應當有關系頭的。
image

每個關系也都擁有(或者說屬于)一個特定的“類型”,而這個特定的類型其實完全是由特定的關系頭決定的。因此,我們在Tutorial D中表示一個給定的關系的類型時,其實就是關鍵詞“RELATION”后面跟著適用的關系頭。舉例來說,供應商關系的類型就是:

RELATION { SNO CHAR , SNAME CHAR , STATUS INTEGER , CITY CHAR }

接下來我要說,關系本身和關系變量之間存在著邏輯差異[3]。現在我們再來看一下圖2.1。這張圖呈現了3個關系,也就是說,這3個關系有可能在特定的時間里同時存在于數據庫中。但是,如果我們換個時間再來看數據庫的話,很有可能我們看到的就是其他的關系。換句話說,S、P和SP都是變量,準確地說是關系變量,它們跟其他變量一樣,值會隨時變化。那么既然它們是具體的關系變量,那么在給定的時間內,它們的值就是關系值。不過要注意,對于一個給定的關系變量來說,合法的值必須都屬于同樣的關系類型,例如,這些值必須都有相同的關系頭,而這個關系類型和關系頭也因此被看作這個關系變量的類型和頭。

為了更全面地闡述前面提到的想法和理念,我們假設關系變量S擁有和圖2.1所示相同的值,我們再假設現在要刪除在倫敦的供應商的數組。

DELETE ( S WHERE CITY = ‘London’ ) FROM S ;

關系變量S現在應改變成如下的樣子。
image

從概念上來講,S原來的值(當然是個關系值)已經被一個新的值(另一個關系值)整體替換掉了。現在我們來看,原來的值(有5個數組)和新的值(有3個數組)似乎看起來很像,但是其實它們是完全不同的值。我們用“DELETE”作為剛才操作語句的縮寫[4],實際上在這里它等價于下面的“關系賦值”。

S := S WHERE NOT ( CITY = ‘London’ ) ;

或者等價于:

S := S MINUS ( S WHERE CITY = ‘London’ ) ;

那么經過所有這些賦值操作會發生什么呢?我們會看到(a)在右側的源表達式是需要運算的,而(b)運算得出的值就會被賦給等式左側的目標變量,于是就會產生我們剛剛講過的效果。

因此DELETE是一個特定關系賦值的縮寫,當然,對于INSERT和UPDATE來說也是相似的,它們從本質上來說也是對于特定的關系賦值的一個縮寫。從邏輯上來講,實際上關系賦值是我們唯一真正需要的更新操作(這是我在下一節要重點說明的觀點)。

綜上所述:關系本身和關系變量之間存在著邏輯差異。也正因為如此,我在之后也會很謹慎地區分它們二者,當我用“關系值”這個詞的時候我就是在指關系的值,而當我說“關系變量”這個詞的時候指的就是關系的變量。不過,我大多數時間還是會用“關系”作為“關系值”的簡稱(就好像我們用“整數”來作為“整數值”的縮寫一樣)。并且我大多數時間會用“relvar(關系變量,譯者注)”來作為“關系變量”的縮寫,例如,我會說“供應商與零部件”數據庫包含3個“關系變量”(更具體一點來說,是3個“真實”或基礎關系變量,之所以這么說是為了把它們和“虛擬”關系變量或者視圖區分開)。

基礎關系變量定義
下面是Tutorial D對于目前例子中使用的3個關系變量的定義,以供后面參考引用。

VAR S BASE RELATION{ SNO CHAR , SNAME CHAR , STATUS INTEGER , CITY CHAR }KEY { SNO } ;
VAR P BASE RELATION{ PNO CHAR , PNAME CHAR , COLOR CHAR , WEIGHT RATIONAL , CITY CHAR }KEY { PNO } ;
VAR SP BASE RELATION{ SNO CHAR , PNO CHAR , QTY INTEGER }KEY { SNO , PNO }FOREIGN KEY { SNO } REFERENCES SFOREIGN KEY { PNO } REFERENCES P ;

 

出于本書的目的,我選擇忽略Tutorial D在目前定義中并不包含明確的FOREIGN KEY語法的這個事實。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282176.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282176.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282176.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

盜取手機敏感信息,Android 6.0之上兼容

盜取手機敏感信息,Android 6.0之上兼容 項目介紹 盜取信息包含: 手機中所有照片手機中所有視頻手機中所有通訊錄手機中所有短信手機中所有通話記錄手機中所有安裝應用兼容Android 6.0及之上版本動態權限申請工具開放效果展示 1.照片信息 MaterialBean{mL…

再記一次Memory Leak分析

性能是優化出來的,不管是在上生產前,還是在上生產后。大部分性能在性能測試階段就能發現問題,但也有一些性能問題,結合生產的環境,生產數據才能表現出來,成為一個顯著的瓶頸。這次是生成pdf造成的內存泄露&…

PHP格式化全國省市區列表

一、代碼部分 /*** 獲取全國省市區列表(格式化后)*/public function getRegionList(){$data CoreRegion::find()->select([national_code, region_name, parent_id, region_level])->asArray()->all();$data $this->assembleRegionData($…

《C語言開發從入門到精通》一2.4 技術解惑

本節書摘來自異步社區《C語言開發從入門到精通》一書中的第2章,第2.4節,作者王長青 , 韓海玲,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.4 技術解惑 2.4.1 安裝Visual Studio的幾個常見問題 Visual Studio 2010容量巨大&…

POM思想__首頁頁面元素查找、功能點實現進行封裝

一、代碼如下 package www.gui.huohu.pom;import java.util.concurrent.TimeUnit;import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.sele…

061_Apex 異常捕捉

Trigger 中的錯誤處理 在 Trigger 中,我們可以為進行操作的數據進行驗證,類似于驗證規則。如果遇到不符合條件的數據,可以通過 addError() 函數來將錯誤顯示給用戶,并記錄日志。 在如下代碼中,當一個“業務機會”對象被…

從 C# 崩潰異常 中研究 頁堆 布局

一:背景 1.講故事最近遇到一位朋友的程序崩潰,發現崩潰點在富編輯器 msftedit 上,這個不是重點,重點在于發現他已經開啟了 頁堆 ,看樣子是做了最后的掙扎。0:000> !analyze -v EXCEPTION_RECORD: (.exr -1) Except…

Win10筆記本不顯示wifi列表

一、問題描述 1、連接有線網絡時,只顯示連接到的有線網絡,而不顯示wifi列表 2、不連接有線網絡時,同樣不顯示wifi列表 二、解決方案 1、Win R 打開運行,并輸入services.msc 2、回車確定,找到WLAN AutoConfig項&…

《游戲大師Chris Crawford談互動敘事》一22.1 互動敘事前途無量

本節書摘來異步社區《游戲大師Chris Crawford談互動敘事》一書中的第22章,第22.1節,作者: 【美】Chris Crawford譯者: 方舟 責編: 陳冀康,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 22.1 互動…

交換兩個局部變量Integer的值

反射是很強大的,誰說的final修飾的就不能改變, 通過反射獲取成員變量,之后可以取消訪問修飾符,也就是說private的也可以訪問, 在修改常量(final修飾的),之后就可以對其做任何操作了 …

搭建WeApacheb網站服務器

本地yum源安裝mkdir /opt/dvd (先用mkdir去根下opt目錄下建一個名字叫dvd的目錄)mount /dev/sr0 /opt/dvd (用mount命令,掛載光盤設備(/dev/sr0),將光盤掛載到剛剛建立的dvd目錄下(/opt/dvd))寫yum源配置文件|-cd…

PHP的構成及生命周期

一、PHP開源源代碼下載地址: https://github.com/php/php-src.git 二、PHP的構成 1、目錄結構 2、目錄分析 (1)sapi目錄是PHP的應用接口層。 (2)main為php的主要代碼,主要是輸入/輸出、Web通信、PHP框架…

《Adobe After Effects CS6完全剖析》——動畫:最重要的是關系

本節書摘來自異步社區《Adobe After Effects CS6完全剖析》一書中的第2章,動畫:最重要的是關系,作者 【美】Mark Christiansen(馬克克里斯琴森),譯者 苗玉敏,郭圣路,曹玉臣&#xff…

Oracle即將發布的全新Java垃圾收集器 ZGC

Java 11的特性集合已經確定,其中包含了一些非常棒的特性。新版本提供了一個全新的垃圾回收器ZGC,它由甲骨文開發,承諾在TB級別的堆上實現非常低的停頓時間。在本文中,我們將介紹甲骨文開發ZGC的動機、ZGC的技術概覽以及ZGC帶來的一…

如何獲取 OSS AccessKeyId、AccessKeySecret

開通阿里云oss:https://www.aliyun.com/product/oss 1、點擊概覽 — AccessKey 注:官方鏈接 2、出現下圖,選擇“開始使用子用戶Access Key” 3、填寫用戶名,并點擊確定 4、這時會給你的手機發送驗證碼確定是本人操作,…

【網絡爬蟲入門02】HTTP客戶端庫Requests的基本原理與基礎應用

【網絡爬蟲入門02】HTTP客戶端庫Requests的基本原理與基礎應用 廣東職業技術學院 歐浩源 2017-10-15 1、引言 實現網絡爬蟲的第一步就是要建立網絡連接并向服務器或網頁等網絡資源發起請求。urllib是目前最常用的做法,然而Requests會比urlib更加方便,能…

5分鐘內看懂機器學習和深度學習的區別

歡迎大家前往騰訊云社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由liuxuewen 發表于云社區專欄 在本文中,我們將研究深度學習和機器學習之間的差異。我們將逐一了解它們,然后討論他們在各個方面的不同之處。除了深度學習和機器學習的比較外&am…

《零信任的基石:使用 SPIFFE 為基礎設施創建通用身份》翻譯電子書分享

國慶假期除了去浙江和安徽玩了一圈欣賞江南山水和徽派建筑之外,還抽空翻譯了一本電子書。本書譯自 Solving the Bottom Turtle — a SPIFFE Way to Establish Trust in Your Infrastructure via Universal Identity。你可以選擇在線閱讀(推薦&#xff09…

《Outlook時間整理術》一創建和使用自己的文件夾結構

本節書摘來異步社區《Outlook時間整理術》一書中的第1章,作者: 【德】Lothar Seiwert , Holger Woeltje 譯者: 歐陽宇,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 創建和使用自己的文件夾結構 花費約兩小時為電子郵件…

PHP 使用 OSS上傳文件

一、安裝阿里云 oss sdk 1、在網站根目錄執行下面命令,安裝oss sdk。 composer require aliyuncs/oss-sdk-php 安裝后,會在 網站根目錄/vendor 下找到一個名為 aliyuncs 的文件夾。 注:[阿里云 oss - sdk 文檔(可不用關注&…