集合理論是由數學家Georg Cantor創建的,這是一個基於關系模型的數學分支。Cantor的集定義如下:
集合,我們的意思是:任意集合體M是我們感知或想到的,能夠確定的、互異對象m(稱之為M的元素)的整體。
──Joseph W. Dauben和Georg Cantor(普林斯頓大學出版社,1990年)
定義中的每個字都有著深刻和重要意義。集合定義和集合從屬關系是無需證明的公理,宇宙中的每個元素要麼是集合成員,要麼不是集合成員。
讓我們從Cantor定義中的每個詞開始。一個“集合”應將其視為單個實體,你的焦點應該放在對象的集合上,而不是組成集合的單個對象上。然後,當你對數據庫中的表(如雇員表)編寫T-SQL查詢時,你應該將雇員的集合看作是一個整體,而不是單個的雇員。這聽起來可能並不重要並且很簡單,但顯然很多程序員很難采用這種思維方式。
“互異”這個詞的含義是指集合中的每個元素必須是唯一的。跳躍到數據庫中的表,你可以通過定義鍵約束來強制表中行的唯一性。沒有鍵的話,你就不能唯一地標識行,因此表也就不能取得“集合”資格。相反,該表將是一個多重集合或是一個無序的單位組。
“我們感知或想到的”這句話意味著集合的定義是主觀的。思考一下教室:一個人可以被認為是“人”的集合,也有可能被認為是“學生”或“教師”的集合。因此,在定義集合方面你具有很大的自由度。當你為數據庫設計數據模型時,設計過程應仔細考慮應用程序的主觀需求,從而為相關實體確定恰當的定義。
至於“對象”,集合的定義不是限制為像汽車或雇員這樣的物理對象,而是相關的抽象對象,如質數或線條。
Cantor的集合定義省略掉的內容很可能像所包含的內容一樣重要。請注意,定義中沒有提到集合元素間的任何順序,集合元素的列出順序並不重要。列出集合元素的正式標記符號是使用大括號:{a、b、c}。因為與順序無關,你可以使用{b, a, c}或{b, c, a}表示同一集合。跳躍到屬性(SQL中稱之為列)集合,它們組成了關系(SQL中稱之為表)的表頭,元素應該是按名稱標識──而不是按順序位置標識。
同樣,思考一下元組(SQL中稱之為行)的設置,它們構成了關系的主體,元素由其鍵值進行標識,而不是按位置標識。許多程序員很難適應這種觀念,對於查詢表而言,行之間沒有順序。換句話說,對表的查詢可以按任意順序返回表中的行,除非你基於特定展現目的,明確要求數據以特定方式的進行排序。