2024-02-27|閱讀時間 ‧ 約 28 分鐘

認識MySQL

    ※ MySQL是什麼?

    MySQL是一種開源(免費)的關聯式資料庫管理系統,所以任何人都可以免費使用,是Web開發中最常用的資料庫之一。MySQL 會將資料儲存在由資料列與資料欄組成的資料表中。使用者可使用結構化查詢語言 (通常稱為 SQL) 來定義、操控、控管及查詢資料。

     簡單來說,資料庫是用來放置大量資料與檔案的一個倉庫,SQL是跟網站倉庫溝通的管員,而MySQL是用來管理倉庫的系統。因此,我們可以透過MySQL系統請SQL與倉庫溝通,管理資料庫中的資料。

    ※ 關聯式資料庫(RDBMS)是什麼?

    關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。這些表格包括行和列,彼此之間存在明確的關聯性。

    關聯式資料庫有三個特質:

    1. 資料是用一個或是多個資料表 (table) 的方式存放。每一筆資料都是在 table 中的一個 record,然後再把不同的 table 集合起來,就成為一個關聯式資料庫。所以使用關聯式資料庫的網站,背後都有多個 table,負責紀錄不同的資料。


    例如在一個電商網站中,應該會有賣家、商品、分類、使用者和交易紀錄等資料表,而這些資料表各自也有不同的關聯。

    1. 資料之間有明確的關聯關聯式資料庫一般都用來儲存結構化的資料,而資料之間大多會有清楚的關聯。

    例如:在建立 To-do List 的認證系統的時候,需要建立todo 跟 user 這兩種資料的直接關聯性。因此在關聯式資料庫裡,todo 跟 user會以兩個資料表來存放,而在兩個資料表之間,我們也會設定「使用者擁有 todo」這個關聯:

    1. 以 SQL 語言操作。SQL (Structured Query Language 結構化查詢語言) 是一種專門用來管理與查詢關聯式資料庫的程式語言。透過 SQL,我們能在關聯式資料庫裡新增、查詢、更新和刪除資料,同時也能建立和修改資料庫模式。它的語法一切都是以資料為主角去思考。看一個簡單的 SQL 的範例:這句話的意思,就是「從 [TABLE_NAME] 的資料表中取出滿足 [COND] 條件的資料。
    SELECT * FROM [TABLE_NAME] WHERE [COND];

    綜合以上所述,由於關聯式資料庫須事先設計好架構,上線後如要進行欄位變更便會相當麻煩,若資料量龐大,變更Schema更是工程浩大。按照關聯式資料庫模型遵循嚴格的 ACID 屬性,對於已經有明確的資料格式,並預計未來不會有大幅度的變更的專案,多考慮選擇使用關聯式資料庫。 大多使用在網站開發、企業應用、日誌分析、數據倉庫等。

    ※ 認識資料表 Table

    以下是一張通訊錄資料表,這張表格是數筆資料的集合。

    在資料表上,每一列 (row) 都代表一筆紀錄 (record),也就是「一筆資料」。

    垂直的欄在資料庫的術語裡被稱為資料欄位 (field),而他們代表的意義是屬性 (attribute)

    在資料表上最小的單位是格子 (cell),每個格子代表某一筆紀錄的某一個屬性的值 (value)。例如在下例中,「陳小明的郵箱」是 chen@example.com。

    創建一個資料表的時候,會替它取個名字 (table name),表示資料表中的資料是同一種類。

    每一個聯絡人都有一個獨一無二的識別碼,也就是第一欄的「編號」,也就是流水號。

    ※ 常用的資料型態

    • 字串 (string): image、title
    • 文字段落 (text): description
    • 整數 (integer)
    • 浮點數 (float)
    • 日期時間 (datetime): release date
    • 布林值 (boolean)

    ※ 認識資料的關聯

    1. 一對一(One to One):一筆資料只會對應到最多一筆資料。

    例:在一個購物網站裡,一個使用者只會有一個購物車,該購物車也只會被一個使用者所擁有。

    1. 一對多(One to Many):一筆資料 A 會對應到多筆資料 B,但資料 B 反過來卻只會對應到一筆資料 A。

    例:在一個購物網站的一個商品分類裡會有多個商品,而一個商品只會屬於一個分類。

    1. 多對多(Many to Many):一筆資料 A 會對應到多筆資料 B,而一筆資料 B 也會對應到多筆資料 A。

    例:一個使用者會參與多個活動,而一個活動也會有多個使用者參與。


    ※ 辨識資料之間的關係

    最基本的思考方式,是詢問在目前應用程式需求的情境下:

    • 資料 A 是否有多筆資料 B?
    • 資料 B 是否有多筆資料 A?

    兩個問題都是 NO,代表資料 A 和 B 是一對一的關係。

    如果其中一個是 NO,而另一個是 YES,那麼就是一對多的關係,看哪個資料是多的那方。

    如果兩個問題都是 YES,那麼就是多對多的關係。

    ※ 使用主鍵和外鍵建立資料的關係

    • 主鍵 (Primary Key):代表一個資料表 (table) 裡的一筆資料具備唯一性(Uniqueness)的屬性,而每個資料表一定要有一個 primary key 的欄位。

    特性:

    1. 唯一性 (Uniqueness):唯一性使得該屬性能獨一無二地代表一筆資料,不能讓其他同樣的屬性有一樣的值。

    例:能代表學校學生資料唯一性的屬性,是學生證號碼、信箱和駕照號碼。

    1. 持有性 (Availability):

    例:駕照號碼這個屬性雖然具備唯一性,但有些學生可能沒有駕照,故不滿足持有性,無法作為主鍵。

    • 外鍵 (Foreign Key)「外鍵 (Foreign Key)」的功能是用來建立資料之間的關係,並且,外鍵一定是其他資料表的主鍵。至於外鍵的取名,通常會讓人能看得出來和另一個資料表的關係。

    例:透過 album_id 可以找到在特定 album 的所有 photo。


    ※ 一對一的關係 (One to One)

    在一對一的關係裡,我們可以把任一 table 的 Primary Key 放入另一個 table 當 Foreign Key。

    例:使用者 (User) 和購物車 (Cart) 是一對一的關係:

    在 carts table 上增加一個 user_id 屬性作為 Foreign Key ,對應到 users table 的 id 屬性

    ※ 一對多的關係 (One to Many)

    我們要在「多」的那方 table 上新增 Foreign Key,對應到「一」那邊的 Primary Key。

    例:一個分類 (Category) 會有多個商品 (Product),所以要把 categories 的 id 放入「多」的那端,也就是在 products table 上加入一個 category_id 屬性

    ※ 多對多的關係(Many to Many)

    在建立多對多關係的資料時,要在原本的兩個 table 之間,加上一個新的 Table。再讓原本的兩個 table 與新增的 table,建立一對多的關係。最後,才把原本的兩個 table 的 primary key 作為 foreign key 放入新增的 table 裡。

    例:使用者 (User) 和商品 (Product) 是多對多的關係。

    • 第一步,在兩個 table 之間新增一個名為 orders 的 table,users 與 products 接著與 orders table 建立一對多的關係
    • 第二步,設定 orders table 的 Primary Key 為 id
    • 第三步,在 orders table 上新增一個 user_id 屬性,當成 Foreign Key,對應到 users table 裡的 id
    • 第四步,把 products table 的 id 放入 orders table 裡,也就是在 orders table 上加入一個 product_id 欄位。

    注意:由於多對多關係會新增 join table,並拆解成兩個一對多的關係,所以在關聯式資料庫的設計裡,最後只會留下一對一和一對多的關係。





    分享至
    成為作者繼續創作的動力吧!
    © 2024 vocus All rights reserved.