iT邦幫忙

2024 iThome 鐵人賽

DAY 22
0
Modern Web

從零開始:全端新手的困境與成長系列 第 22

Day22 用對方式建構 MySQL 資料庫,拯救你的開發人生!

  • 分享至 

  • xImage
  •  

Day22 用對方式建構 MySQL 資料庫,拯救你的開發人生!

今天,我們來聊聊如何正確地建構 MySQL 資料庫。如果你跟我一樣,剛開始都是手動一行行寫 SQL ,那麼今天這篇文章會徹底改變你的做法!我們從 MySQL Workbench 的安裝開始,再到介紹 Sequelize,最後再深度探討如何用 Migration 和 Seeder 來管理資料庫。透過這些方法,你將能更輕鬆地應對後端開發中的資料庫變更。

https://ithelp.ithome.com.tw/upload/images/20240930/20168326jfwGaeLndg.png

文章大綱:

  1. 安裝 MySQL 與 MySQL Workbench
  2. 初學者常犯的錯誤:手動建立 Database
  3. 引入 Sequelize:MySQL 資料庫的 ORM 工具
  4. 使用 Migration 和 Seeder 來管理資料庫變更
  5. Migration 和 Seeder 的詳細步驟
  6. 用 Sequelize 化解手動 SQL 的痛點,資料庫管理更輕鬆!

1. 安裝 MySQL 與 MySQL Workbench

安裝 MySQL

首先,我們需要安裝 MySQL 資料庫。到 MySQL 官網 下載並安裝最新版本。安裝過程中,可以選擇預設設定,完成後,你就有了本地的 MySQL 伺服器。

安裝 MySQL Workbench

接著,我們要安裝 MySQL Workbench 這個好用的工具,像是我就覺得超級方便。到 MySQL Workbench 官網 下載並安裝。完成安裝後,你就能用它來視覺化地操作資料庫,輕鬆建立資料表、執行查詢和管理資料。

Workbench 的簡單介紹:

  • 建立資料庫:在 Workbench 中,選擇 "Create a new schema" 來建立新的資料庫。
  • 執行 SQL 查詢:你可以在 Query Editor 中撰寫並執行 SQL 查詢。
  • 管理資料表:透過視覺化介面來建立、編輯、管理資料表的結構,這樣操作資料庫會直觀很多。

https://ithelp.ithome.com.tw/upload/images/20240930/20168326FLLfhntqto.png


2. 初學者常犯的錯誤:手動建立 Database

如果你曾經手動一行行地寫 SQL 來建立資料表,那麼你應該懂得這種方式有多耗時、繁瑣。我還記得剛開始學習後端開發的時候,對資料庫的概念也不是很清楚。當時覺得,啊,這不就是寫 SQL 嗎?一行一行地把資料表建立起來,然後 INSERT 資料,更新、刪除,好像挺簡單的。

這種想法,很快就讓我掉入了一個巨大的坑裡。

手動寫 SQL 的問題是什麼?

剛開始你可能覺得,反正我只有幾個資料表,手動寫幾條 SQL 也沒什麼大不了的。但是隨著專案變得越來越複雜,你的資料庫也開始膨脹,這時候問題就出現了。

2-1. 隨著需求變動,修改資料庫變得超痛苦

手動寫 SQL 的第一個問題是當你需要對資料庫結構進行變更時,整個過程會變得非常混亂。比如,突然需要在某個資料表中新增一個欄位、修改一個欄位類型或刪除一個已經不需要的欄位。這些看似簡單的操作,實際上需要你仔細核對所有的資料表,然後手動撰寫對應的 ALTER TABLE 語句。如果你的 SQL 寫錯了,可能還會導致資料遺失或數據錯誤!

我還記得自己曾經花了大半天的時間,去修改一個資料表的結構,為每個欄位對應不同的需求寫 SQL。過程中反覆改錯,又要重新執行,完全浪費了我的開發時間。

2-2. 團隊合作時,版本管理噩夢

當你的專案變大,開始有團隊成員加入時,手動寫 SQL 的問題就更加明顯了。每個人可能都在自己的分支上手動修改 SQL,這意味著當你需要合併大家的內容時,SQL 的版本差異會變得無比混亂。


3. 引入 Sequelize:MySQL 資料庫的 ORM 工具

什麼是 Sequelize?

Sequelize 是一個用 JavaScript 操作 MySQL 資料庫的 ORM 工具,讓你不用一行行手寫 SQL,就能管理資料庫。透過 Sequelize,你可以用程式碼來處理資料庫操作,讓操作更直觀。

為什麼選擇 Sequelize?

  • 減少 SQL 撰寫:你不需要自己一行行撰寫 SQL,Sequelize 會幫你生成對應的 SQL 語句。
  • 更直觀的操作:你可以用 JavaScript 的方式來操作資料表和資料,降低 SQL 相關的複雜性。
  • 內建 Migration 和 Seeder:這些工具可以幫助你輕鬆處理資料庫變更和假資料的插入,極大減少手動操作的繁瑣過程。

4. 使用 Migration 和 Seeder 來管理資料庫變更

當我們用 Sequelize 管理資料庫時,MigrationSeeder 是不可或缺的工具:

  • Migration:幫助你管理資料庫結構的變更,比如新增、修改資料表。
  • Seeder:幫助你快速插入測試資料或假資料,方便在開發過程中模擬數據場景。

5. Migration 和 Seeder 的詳細步驟

步驟 1:初始化 Sequelize 專案

首先,安裝 Sequelize 和 Sequelize CLI 工具:

npm install sequelize sequelize-cli

接著,使用以下指令來初始化專案,這樣就會自動生成所需的資料夾結構:

npx sequelize-cli init

https://ithelp.ithome.com.tw/upload/images/20240930/20168326pvQ7iaFWUg.png

設定好 config/config.json 檔

https://ithelp.ithome.com.tw/upload/images/20240930/20168326D9aU3Hrsz9.png

步驟 2:使用 Migration 新增資料表

透過 Migration,我們可以輕鬆建立資料表。首先,用 CLI 生成 Migration 檔案:

npx sequelize-cli migration:generate --name create-users-table

https://ithelp.ithome.com.tw/upload/images/20240930/20168326ixY62jaP76.png

https://ithelp.ithome.com.tw/upload/images/20240930/20168326dPha4pxkxa.png

然後打開生成的 Migration 檔案,撰寫資料表的結構:

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('Users', {
      id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true,
      },
      username: {
        type: Sequelize.STRING,
        allowNull: false,
      },
      email: {
        type: Sequelize.STRING,
        allowNull: false,
      },
      createdAt: {
        type: Sequelize.DATE,
        allowNull: false,
      },
      updatedAt: {
        type: Sequelize.DATE,
        allowNull: false,
      },
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('Users');
  }
};

步驟 3:撰寫 Seeder,插入初始資料

Seeder 可以幫助你快速插入假資料,讓開發過程更加順利。生成 Seeder 的指令如下:

npx sequelize-cli seed:generate --name demo-user

https://ithelp.ithome.com.tw/upload/images/20240930/201683268zl6V1JDuP.png

https://ithelp.ithome.com.tw/upload/images/20240930/20168326LhCyXB2nbU.png

打開生成的 Seeder 檔案,插入測試用的假資料:

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.bulkInsert('Users', [
      {
        username: 'testuser',
        email: 'test@example.com',
        createdAt: new Date(),
        updatedAt: new Date(),
      },
    ]);
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.bulkDelete('Users', null, {});
  }
};

步驟 4:執行 Migration 和 Seeder

最後,我們來執行 Migration 和 Seeder,將資料表和假資料寫入資料庫:

npx sequelize-cli db:migrate
npx sequelize-cli db:seed:all

執行完畢後,資料庫就會按照你定義的結構建立,並插入測試資料,這樣開發過程就更加輕鬆了。


6. 用 Sequelize 化解手動 SQL 的痛點,資料庫管理更輕鬆!

透過 Sequelize 以及 Migration 和 Seeder,你可以徹底擺脫手動撰寫 SQL 的繁瑣過程,讓資料庫管理變得有條不紊,維護也更為簡單。掌握這些工具,不僅能大幅提升你的開發效率,還能避免許多資料庫常見的錯誤與陷阱。希望今天的分享能夠幫助你在資料庫建構的路上,輕鬆進階!

參考資料:

https://github.com/dean9703111/sequelize-mysql-migration-seeder


上一篇
Day21 後端開發沒那麼可怕,來一起破關吧!
下一篇
Day23 API 撰寫初體驗 – 避免常見錯誤,心態與設計皆重要
系列文
從零開始:全端新手的困境與成長30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言