《PHP和MySQL Web 開發》第8章 設計Web資料庫
封面人物
劉承羽
前言
這是我學習《PHP和MySQL Web 開發》的讀書筆記,一些重要的知識點我會記錄下來,當然只會寫我覺得重要的。
- 如果有幸有人看到這個學習筆記了,你要結合著書看,不要光看這個筆記。
- 在筆記裏我會記錄一些我學習中遇到的問題和解決辦法與注意事項。
- 為了方便管理和查找,文章或者說筆記的目錄我就按照書裏的排了,方便對比著看。
- 不是教學!重要的事說一遍!我是PHP和MySQL 的初學者,我本身是個前端,為了面向工資編程,拓寬知識面才學的。
- 其實還是有一些私心得,因為都說教學相長 和 小黃鴨調試法,我這個是小老虎學習法,對著小老虎講知識點,保證自己學的紮實,能掙錢。
- 歡迎探討和指教,須知一山更比一山高,但是拒絕槓精!
本章主要是介紹了:
- 關係資料庫的概念和術語
- Web資料庫的設計與架構
基礎知識還是要有的,方便了解一些專有名詞,包括資料庫是幹啥的,後端說的時候你聽了至少不懵逼。開始吧!
8.1關係資料庫的概念
下方帶灰色底的文字的都是摘錄的書中原文!可放心閱讀,以後不再說明。
當前使用關係資料庫的時候,並不需要了解關係理論(這是一件好事),但還是需要理解一些關於資料庫的基本概念。
8.1.1表格
一個表格就是一個數據的表格,就和Excel表格一樣,儲存著數據,就是下面這樣,裡面內容不用管,就是讓你看下形式。(一般就叫表)
books
+---------------+-------------------+-------------------------------------+-------+
| id | author | title | price |
+---------------+-------------------+-------------------------------------+-------+
| 0-672-31697-8 | Michael Morgan | Java 開發 | 38.49 |
| 0-672-31745-1 | Thomas Down | Linux 開發 | 27.49 |
| 0-672-31509-2 | Pruitt,et al. | 時間管理 | 27.49 |
| 0-672-31769-9 | Thomas Schenk | 開放系統管理 | 54.99 |
| 0-672-31000-1 | 李重樓 | web開發筆記 | 99.99 |
| 0-672-31000-4 | Nicholas C.Zakas | JavaScript高級程序設計(第3版) | 99.99 |
| 0-672-31000-5 | 李重樓 | web插入資料庫 | 53.20 |
| 0-672-31000-6 | 李重樓 | 網站建設與拆毀 | 44.36 |
+---------------+-------------------+-------------------------------------+-------+
表名叫books,有id,author,title,price 四個數據列。每個列裏對應的是相同的數據類型,每一行對應著是一條由id,author,title,price對應的值構成的數據。
如:0-672-31000-1,李重樓, web開發筆記, 99.99 。這個就是一條數據好理解吧?
注意:豎著的叫列,橫著的叫行。
8.1.2列
表中的每一列都有唯一的名稱,包含不同的數據。此外每一列都有一個相關的數據類型。(注意:豎著的叫列,橫著的叫行。)
如上方表格所示,author 列的數據類型就是字元串類型。這個也很好理解吧?具體都有多少數據類型,在後面有介紹,別急,慢慢看。
重點來了!!!
有時候,列也叫做 域 或者 屬性!
為啥這是重點?
因為以後開發的時候怎麼叫的都有,人家說 列 你腦子裡知道是啥,豎著的那豎行叫列,人家說 域 或者說 屬性 你就不知道是啥了那可不行,招人笑話!
也有叫欄位的,但是這個一般指 列名欄位,比如上面寫的:id,author,title,price 這些。
8.1.3行
表中的每一行代表一個客戶。每一行具有相同的格式,因而也具有相同的屬性。行也稱為記錄。
我上面的表格示例表示每一行代表一本書。
具有相同格式是說:第二行的格式和第三行的格式一定相同,好理解吧?其實所有行格式都相同。
重點來了!!!
行也稱為記錄。
為啥這是重點?道理剛才說過了。不說了。
8.1.4值
每一行由對應於每一列的單個值組成,每個值必須與改了定義的數據類型相同。
這個如果不理解的話,你私信我,我單獨給你解釋。
8.1.5鍵
書裏的介紹你先看。
看完了嗎?沒看完不要看下面的筆記。看不下去也要看,讀,一句話一句話的讀。讀完整個8.1.5。
書讀百遍其義自見是有道理的,我也笨,你以為我比你聰明?我有老師教?不!俺沒有,俺讀了三遍,認真的讀了三遍,我就明白了。
有時候你不是學不會,是不認真學,不認真理解,聽我的,感覺一遍沒明白,就再讀一遍。仔細的讀。讀出聲的那種。
看完繼續!
書裏整段介紹的提煉的就是一句話:鍵,每一條數據所對應的唯一的標識。
書中舉例說明的是人名,人名不唯一啊!
你回想一下,你,有個朋友說:我認識一個人叫小明。你說:哎呀,巧了,我也認識一個叫小明的。
結果一對,他說的是個女的,你說的是個男的,或者你說的是東北的小明。他說的是臺灣的小明。根本不是一個人。
這就書中舉名字例子要表達的,所以我們需要一系列信息來區分開兩個小明或者確定其中一個你認識的小明,比如:性別,戶籍所在地,出生年月,外加其他的體態外表特徵等。
現實生活中:你的身份證號,就是這些信息綜合抽象而成的,就是在這個「社會資料庫」中,人口表中的 鍵,確認你身份的唯一ID。(ID 是identity的縮寫,意思為身份)
這麼一想,是不是感覺你家的戶口本其實就很像表?戶口本來有叔叔,阿姨和你,然後戶口表中唯一確定你家三口誰是誰的最快最便捷的身份標識是不是身份證號?
來,再記一遍:鍵,每一條數據所對應的唯一的標識。
表中的標識列稱為 鍵 或 主鍵。
這是書中說的,書裏說的對,標識列 稱為 鍵 或 主鍵,和你說的有衝突啊?!
不衝突的。
說表的主鍵是什麼的時候?
請看上方的books表,上方books表裡的id列就是表的主鍵。
為啥id就是主鍵別的不可以嗎?
沒有為啥!!因為我在寫這個表的時候,就遵循的id欄位這一列,就是唯一的標識數據,用來做主鍵的。
那你說的,鍵,每一條數據所對應的唯一的標識。是什麼意思?
舉例:你找作者叫李重樓的,書名為《網站建設與拆毀 》,44.36一本的書。
這個是不是一條數據?
他的id是 0-672-31000-6 ,這個 0-672-31000-6 就是這一條數據所對應的唯一的標識。
再跟我讀一遍:鍵,每一條數據所對應的唯一的標識。嗯呢,乖~
通常,資料庫由多個表組成,可以使用鍵作為表格之間的引用。
這種關係用關係資料庫術語來描述的時候就是外鍵。
這個出現在別的表中的鍵,叫外鍵。
這個看書吧,我覺得很簡單,我實在懶得畫圖了。
8.1.6模式
資料庫整套表格的完整設計成為資料庫的模式。
以書中列子來說:Customers(CustomerID,Name,Address,City),這個就是文本格式表示,有的人會手畫表示,怎麼都可以,你整明白了就行。我就對這個文本格式的模式進行一下解釋吧。
- Customers:表的名稱,你家的戶口本,戶口本三個字就是表名。
- CustomerID,Name,Address,City 都是表格的列。
- CustomerID 帶下劃線的是的是表示該列是主鍵。
- CustomerID 斜體的表示該列是所在關係表的外鍵。
- CustomerID 又是斜體還有下劃線的表示的是:該列是標識列 叫 主鍵,同時該列是所在關係表的外鍵。
8.1.7關係
這裡還是比較複雜難理解,至少我是這麼覺得。
所以,如果你覺得很簡單,恭喜你,你是個天才啊~,但是你也覺得難,那麼表示確實正常,不要氣餒,老規矩,先讀三遍。
讀完了?
我開始照抄書了啊~
關係資料庫中有3種基本的數據關係類型。根據關係雙方所含對象的多少,可以將這些關係分為 一對一,一對多,多對多3種關係。
定義下了,有三種關係。那麼開始理解。
一對一關係表示關係雙方只有一個對象相互對應。
一對一是好理解的,定義都說了,你只能有一個對象,你對象也只能有一個男/女朋友,而這個男/女朋友得是你。
有一個人好幾個對象的啊?那就是下一步說的了:
在一對多的關係中,一個表中的一行與另一個表中的多行具有相互關聯的關係。
這個叫一對多,但是這個不舉男女戀愛的例子了,因為太扎心,咱講父與子的關係。
一個人可以生多個孩子,這些孩子都管這個人叫爹,這個爹就是「一行」,這些孩子就是「多行」,他們的關係是父子關係,如果換成顧客買東西那就是一個顧客可以購買n多件商品他們是購買關係(姑且這麼叫吧)。
在多對多的關係中,表中的多行與另一個表中的多行具有相互關聯的關係。
這個叫多對多,其實我一開始看的時候在想,什麼情況下會出現多對多呢?
現實生活中有什麼實際例子能幫我理解消化一下嗎?
我就搜啊搜,看看有啥實際應用的列子嗎?然後我搜到一個很貼近每個人生活,很好的例子:數據表對應關係(一對一、一對多、多對多)。
作者是:Abeam,他個人描述深深的刺激了我,描述是:編程大忌,懶~~~
因為我就懶....
扯遠了。
多對多,在資料庫中也比較常見,可以理解為是一對多和多對一的組合。要實現多對多,一般都需要有一張中間表(也叫關聯表),將兩張表進行關聯,形成多對多的形式。例如: 老師表、班級表、科目表,中間表為:課程表。
例子很詳細了,A老師教一二班語文,B老師教一二班數學。你思考一下,教師是個表,表裡有AB兩位老師,班級是個表,有一二兩班。
班級表中一班對應兩位老師,A和B。教師表中A對應著兩個班,一班和二班。這個就是多對多,不知道你理解沒有。
暫時沒有理解也沒關係,在後續有實際的應用,會幫助你理解的。
我不得不獻上我的畫作了