本節書摘來自華章出版社《mysql dba修煉之道》一書中的第3章,第3.1節,作者:陳曉勇,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。
本篇首先講述資料庫開發的一些基礎知識,如關系資料模型、常用的sql文法、範式、索引、事務等,然後介紹程式設計開發将會涉及的資料庫的一些技巧,最後結合生産實際,提供一份開發規範供大家參考。
本章将為讀者介紹 mysql 資料庫相關的開發基礎,首先,介紹一些基礎概念,然後講解關系資料模型和 sql 基礎。由于在網際網路開發者中,php 開發者占據了相當大的比重,是以這裡也将簡要介紹下 php 開發者應該掌握的一些基礎知識和開發注意事項。最後,要接觸的是 mysql 資料庫更深層次的内容——索引、主鍵、字元集等。
(1)架構
在軟體開發過程中,研發人員經常借助架構(framework)來輔助自己進行軟體開發。成熟的架構可以幫助處理很多細節性的問題,并完成一些基礎性的工作,如生成通路資料庫的代碼、簡化網絡程式設計,這樣開發者就會有更多的時間和精力專注于業務邏輯的設計。但目前仍存在的一個問題是,一些架構對于資料庫的使用不符合我們的預期,或者說不友好,故而有必要先了解一下開發架構是如何存取資料的。大家有興趣的話,可深入學習和使用如下這些業内使用比較廣泛的一些架構,如django(python)、ruby on rails(ruby)、zend framework(php)、spring(java) 等。
(2)資料模型
資料模型(data model)是資料的定義和格式,即資料是如何組織的。關系資料模型是以二維表的結構來表示實體與實體之間的聯系,每個二維表又可稱為關系。關系可以看作是一系列記錄的集合。如,員工關系表(見表3-1)和項目關系表(見表3-2)。

從以上兩個關系表中可以看出,項目表和員工表是存在某種關系的。衆多的關系表,以及關系表之間的關系,構成了關系資料模型,而支援關系模型的資料庫管理系統則稱之為關系資料庫管理系統。
其他的模型還有xml和圖資料模型(graph data model)等。
xml是一種層次結構的資料結構,使用标簽、标簽值來辨別資訊,如下面的這個xml檔案。
而圖資料模型存儲的資料則是以點、線的方式進行存儲的。
(3)schema
schema可譯作“模式”,不同的資料庫管理系統,schema的意義會有些不同。依據維基百科的定義:schema指的是用資料庫管理系統支援的語言描述的資料結構,它定義了資料是如何組織建構的。
典型的關系資料模型,是以資料庫表的形式來組織資料的,資料存儲于一系列設計好的表中。也就是說,關系資料庫的schema就是資料庫中各種關系的結構化描述。一般來說,資料模組化就是設計資料表的過程,一般在項目初期就設計好表結構,在開發過程中可能會不斷地調整表結構,但一旦應用上線,表結構往往就不會頻繁變更了。若項目積累了大量資料,這時再修改表結構可能會很耗時,進而嚴重影響線上服務,是以前期進行一個優良的資料庫表設計是很有必要的,這也考驗着開發人員的資料模組化能力。資料庫表的設計一般由經驗豐富的開發人員來負責,如果dba時間精力允許,也會參與到重要的項目資料庫表設計中。
mysql中的schema可以看作是資料庫(database)的同義詞。我們建立一個schema,其實就是建立一個資料庫(create database)。 而在其他資料庫中,schema的概念則略有不同。
(4)結構化資料
結構化資料通常是指被記錄資訊的類型,格式等屬性是固定的,一般可存儲于關系資料庫或電子表格中,可以用資料記錄的形式進行表達和存儲,如産品及其零部件的名稱、代号、設計日期、類型等資訊。結構化資料往往需要預先定義好業務資料類型的模型,确定這些資料類型是如何存儲、處理和通路的。例如确定業務資料的哪些字段資訊需要存儲,以及這些資訊的資料類型(數字、貨币、字元串、日期等)和資料輸入的校驗(如字元個數、日期範圍等)。很長時間以來,關系資料庫或電子表格軟體是處理結構化資料的最佳工具,是以業内也有人簡單地把存儲在關系資料庫中能用二維表格表示的資料稱為結構化資料,如來自于企業内部已經被變換成固定規則、格式的資料,而把不友善用關系資料庫存取的資料稱為非結構化資料,如市場比較和分析報告、股票行情等就是以非結構化的、不可預測的格式呈現的資料。
(5)非結構化資料
有些資訊無法用數字或統一的結構來表示,或者說沒有一個預定義的資料模型,如文本、照片和圖形圖像、聲音、視訊、網頁、pdf檔案、powerpoint示範文稿、電子郵件、部落格、wiki和文字處理文檔等,我們将其稱之為非結構化資料。
(6)半結構化資料
半結構化資料介于結構化資料和非結構化資料之間,它可看作是一種結構化資料,但是缺乏嚴格的資料模型,半結構化資料可通過标簽或其他類型的标記識别資料中的某些元素,但半結構化資料不具有剛性結構。xml和其他标記語言經常被用來管理半結構化資料。
例如,文字處理軟體現在可以定義中繼資料,用于顯示作者的姓名和建立日期,但資料的主體——文本檔案仍然是非結構化資料。電子郵件有發件人、收件人、日期、時間和其他辨別資訊,但電子郵件消息的内容和附件仍然是非結構化資料。照片或圖形圖像能使用一些關鍵字進行辨別,如創作者、日期、地點和關鍵字,進而能夠組織和定位照片和圖形圖像,但圖像本身是非結構化資料。
相對于非結構化資料,結構化資料往往存儲于關系資料庫中,可以利用關系資料庫進行高效地存儲和檢索,但現實中的資料并不是總能被固定的結構來描述的,生活也并不總是合适整齊的小盒子。非結構化資料和半結構化資料是現實世界的主要資料,而且正在以驚人的速度激增,它們的增長比結構化資料的增長更快,在大資料時代,非結構化(半結構化)資料的提取、存儲和管理是一個難點,非結構化資料能否被有效地管理和應用,這對于企業未來的發展道路影響深遠。
(7)ddl
資料定義語言(data definition language,ddl)是負責資料結構定義與資料庫對象定義的語言。為了設計schema,如建立資料庫,建立表,這時就需要用到資料定義語言。我們常用的有create、alter、drop語句。例如,建立資料庫的語句如下。
<code>create database databae_name;</code>
建立表的語句如下。
<code>create table table_name (id int, name varchar(10));</code>
添加字段的語句如下。
<code>alter table table_name add column column_name int ;</code>
删除表的語句如下。
<code>drop table table_name;</code>
(8)dml
資料操作語言(data manipulation language,dml)是用來查詢和修改資料的語句,包括select、insert、update、delete 4種語句,分别代表查詢、插入、更新與删除,有很多開發人員将它們稱之為“crud”(create、read、update和delete),對應的操作見表3-3。