❶ 資料庫的幾個基本概念,數據,對象,實體,屬性,數據模型
人們把客觀存在的事物以數據的形式存儲到計算機中,經歷了對現實生活中事物特性的認識、概念化到計算機資料庫里的具體表示的逐級抽象過程,即現實世界-概念世界-機器世界三個領域。有時也將概念世界稱為信息世界;將機器世界稱為存儲或數據世界。
一、三個世界
1、現實世界 人們管理的對象存於現實世界中。現實世界的事物及事物之間存在著聯系,這種聯系是客觀存在的,是由事物本身的性質決定的。例如學校的教學系統中有教師、學生、課程,教師為學生授課,學生選修課程並取得成績。
2、概念世界 概念世界是現實世界在人們頭腦中的反映,是對客觀事物及其聯系的一種抽象描述,從而產生概念模型。概念模型是現實世界到機器世界必然經過的中間層次。涉及到下面幾個術語:
實體:我們把客觀存在並且可以相互區別的事物稱為實體。實體可以是實際事物,也可以是抽象事件。如一個職工、一場比賽等。
實體集:同一類實體的集合稱為實體集。如全體職工。注意區分"型"與"值"的概念。如每個職工是職工實體"型"的一個具體"值"。
屬性:描述實體的特性稱為屬性。如職工的職工號,姓名,性別,出生日期,職稱等。
關鍵字:如果某個屬性或屬性組合的值能唯一地標識出實體集中的每一個實體,可以選作關鍵字。用作標識的關鍵字,也稱為碼。如"職工號"就可作為關鍵字。
聯系:實體集之間的對應關系稱為聯系,它反映現實世界事物之間的相互關聯。聯系分為兩種,一種是實體內部各屬性之間的聯系。另一種是實體之間的聯系。
3、機器世界 存入計算機系統里的數據是將概念世界中的事物數據化的結果。為了准確地反映事物本身及事物之間的各種聯系,資料庫中的數據必須有一定的結構,這種結構用數據模型來表示。數據模型將概念世界中的實體,及實體間的聯系進一步抽象成便於計算機處理的方式。
二、E-R模型
E-R模型(實體聯系模型)簡稱E-R圖。它是描述概念世界,建立概念模型的實用工具。E-R圖包括三個要素:
實體(型)――用矩形框表示,框內標注實體名稱。
屬性――用橢圓形表示,並用連線與實體連接起來。
實體之間的聯系――用菱形框表示,框內標注聯系名稱,並用連線將菱形框分別與有關實體相連,並在連線上註明聯系類型。
聯系歸結為三種類型:
1)一對一聯系(1:1)
設A、B為兩個實體集。若A中的每個實體至多和B中的一個實體有聯系,反過來,B中的每個實體至多和A中的一個實體有聯系,稱A對B或B對A是1:1聯系。注意,1:1聯系不一定都是一一對應的關系。可能存在著無對應。如一個公司只有一個總經理,一個總經理不能同時在其它公司再兼任總經理,某公司的總經理也可能暫缺。
2)一對多聯系(1:n)
如果A實體集中的每個實體可以和B中的幾個實體有聯系,而B中的每個實體至我和A中的一個實體有聯系,那麼A對B屬於1:n聯系。如一個部門有多名職工,而一名職工只在一個部門就職,部門與職工屬於一對多的聯系。
3)多對多聯系(m:n)
若實體集A中的每個實體可與和B中的多個實體有聯系,反過來,B中的每個實體也可以與A中的多個實體有聯系,稱A對B或B對A是m:n聯系。如一個學生可以選修多門課程,一門課程由多個學生選修,學生和課程間存在多對多的聯系。
必須強調指出,有時聯系也有屬性,這類屬性不屬於任一實體只能屬於聯系。
三、數據模型簡介
數據模型由三部分組成,即模型結構、數據操作和完整性規則。這里主要介紹模型結構。DBMS所支持的數據模型分為四種:層次模型、網狀模型、關系模型、面向對象模型。其中第四種數據模型目前並未成熟,因此傳統的說法有前三種數據模型。
1、基本層次聯系
層次模型和網狀模型有共同點,可以把它們統稱為格式化模型。基本層次聯系就是包括兩結點和一邊的基本單元,兩個實體間的有向邊代表的基本層次聯系表示一對多的聯系。通常把表示1的實體放在上方,稱為父結點,把表示N的實體放在下面,稱為子結點。
2、層次數據模型
用村形結構表示實體及其之間的聯系的模型稱為層次模型。該模型的實際存儲數據由鏈接指針來體現聯系。特點:有且僅有一個結點無父結點,此結點即為根結點;其它結點有且僅有一個父結點。適合用表示一對多的聯系。
3、網狀模型
用網狀結構表示實體及其之間的聯系的模型稱為網狀模型。允許結點有多於一個的父結點,可以有一個以上的結點無父結點。適合用於表示多對多的聯系。
層次模型和網狀模型從本質上都是一樣的。存在的缺陷:難以實現系統擴充,插入或刪除數據時,涉及到大量鏈接指針的調整。
❷ 在資料庫中,schema,catalog分別指的是什麼
資料庫 Catalog Schema 概念解讀
按照SQL標準的解釋,在SQL環境下Catalog和Schema都屬於抽象概念,可以把它們理解為一個容器或者資料庫對象命名空間中的一個層次,主要用來解決命名沖突問題。從概念上說,一個資料庫系統包含多個Catalog,每個Catalog又包含多個Schema,而每個Schema又包含多個資料庫對象(表、視圖、欄位等),反過來講一個資料庫對象必然屬於一個Schema,而該Schema又必然屬於一個Catalog,這樣我們就可以得到該資料庫對象的完全限定名稱從而解決命名沖突的問題了;例如資料庫對象表的完全限定名稱就可以表示為:Catalog名稱.Schema名稱.表名稱。
詳細信息如下:
In Oracle:
server instance == database == catalog: all data managed by same execution engine
schema: namespace within database, identical to user account
user == schema owner == named account: identical to schema, who can connect to database, who owns the schema and use objects possibly in other schemas
to identify any object in running server, you need (schema name + object name)
In PostgreSQL:
server instance == db cluster: all data managed by same execution engine
database == catalog: single database within db cluster, isolated from other databases in same db cluster
schema :namespace within database.It allows many users to use one database without interfering with each other.
user == named account: who can connect to database, own and use objects in each allowed database separately
to identify any object in running server, you need (database name + schema name + object name)
In MySQL:
server instance == not identified with catalog, just a set of databases
database == schema == catalog: a namespace within the server.
user == named account: who can connect to server and use (but can not own - no concept of ownership) objects in one or more databases
to identify any object in running server, you need (database name
❸ SQL關系資料庫設計理論中提到的超健和候選鍵的概念怎麼理解,很抽象。
超鍵就是指一組欄位可以唯一確定一條數據,而候選鍵是最簡潔的超鍵,也就是只有必要欄位,
舉例來說明,假如有一個班級,班級中沒有同名的學生,有如下一張表。
std_id last_name first_name gender score
10001 張 三 男 85
10002 李 四 男 86
10005 妹 子 女 95
10006 李 三 男 88
這張表裡,因為我們前面說到這個班級里沒有同名的學生。
因此last_name+first_name就是一個超鍵,因為可以唯一確定一行數據,同時也是一個候選鍵,因為這兩個欄位去掉任何一個都不再能唯一確定一行數據。
更明顯的區別在於,last_name+first_name+gender還是一個超鍵,但是已經不再是候選鍵了,因為在確定唯一一條數據的時候,gender不是必要的欄位。
也就是說候選鍵是可以唯一確定一條數據的必要欄位的最小集合,而候選鍵加上任何的額外欄位都是超鍵。
在上面的例子中,std_id自己就是一個候選鍵,std_id+任何額外的欄位都是候選鍵。
同時從習慣而言,一般會把這種std_id欄位定義為主鍵,主鍵並不一定只是一個欄位,如果我們上面的表增加一列班級id(class_id),同時加入每個班級中的std_id都是從10001開始的話,我們就可以用class_id+std_id來作為主鍵。
自己的理解,希望可以幫到題主。
❹ 資料庫抽象層的定義
首先,代碼規劃必須規范,即整個系統使用同一個數據對象實例,並且使用同一個較好的資料庫抽象層。如果有一天用戶要求將Oracle切換到MySQL,則只需要改變系統的配置文件即可。
在當今工業領域中,每個資料庫開發商如微軟、Oracle、MySQL,都有自己的一套SQL標准,它們聲稱是按照ANSI SQL92標准而增加自己的特性,以達到壟斷或佔領市場的目的。
優秀的資料庫抽象層,會根據我們使用的資料庫自動調整一些SQL性能。當沒有使用資料庫本身特定的特性時,就不必更改太多的資料庫連接和資料庫SQL查詢。
使用資料庫抽象層的其他好處是:其性質、概念簡化了復雜的任務。因此,我們不必學習某個資料庫系統的全新特性,而只用一個標準的抽象層的代碼特性即可。
雖然這是一種理想化,但隨著技術的發展,相信資料庫抽象層會為我們做更多的事。
使用PHP進行不同的資料庫系統開發,這些系統很不相同,而許多資料庫抽象層在PHP的層次有所不同,但彼此使用方法相當,它的發展無疑會提高開發效率。
請看圖17-1,觀察有數據抽象層和沒有數據抽象層的區別。
資料庫抽象層的主要性能指標是速度,由於資料庫抽象層是額外的代碼層,因為面向不同的架構與體系,因此有的效率較高,有的則相對比較慢些。
如Metabase是PHP中較慢的一個數據抽象層,它使用C語言編寫,因為它的設計與可移植性最高,而PDO和ADODB是當今世界最快的資料庫抽象類。
圖17-1
如果您非常關注系統的效率和性能,則可以按自己的基準,設置模擬環境,編寫代碼,測試每個資料庫抽象層(類)的性能。
用資料庫抽象層,意味著當從一個資料庫系統向另一個資料庫系統遷移時,幾乎不用更改太多的程序代碼,如將MS SQL Server遷移到MySQL。