---
# System prepended metadata

title: 關聯式資料庫SQL應用：常見產品、操作介面與開發寫法
tags: [資料庫, SQL, ORM, 關聯式資料庫, 筆記]

---

# 關聯式資料庫SQL應用：常見產品、操作介面與開發寫法

###### tags: `資料庫` `關聯式資料庫` `SQL` `ORM` `筆記`

## 關聯式資料庫是什麼？
[可參考我之前整理的MongeDB簡介(與非關聯式資料庫的比較)]([https:/](https://hackmd.io/@A4_j5zN8QReqeCKIAq_Q4Q/H14ZfE9O_)/)

## 常見的產品方案
- MySQL：知名度高、PHP預設搭配，但Oracle(甲骨文)收購後專有化，使用時較需考慮授權問題
- MariaDB：相當於MySQL的自由開源免費版、替代方案，共享較多特性且較容易互相移植環境
- PostgreSQL：另一套完整的開源關聯式資料庫，算是MySQL-MariaDB的主要競品
- SQLite：非伺服器式的簡易、免費關聯式資料庫，只需單一檔案(.sqlite)運作
- SQL Server：微軟開發的專有、付費關聯式資料庫，加入許多獨特的指令與功能

## 常用的操作介面
- 終端機指令：詳見各家資料庫軟體的官方文件說明，便於直接使用原生SQL指令，但操作門檻高且可讀性偏低
- 圖形化介面：屬於額外安裝的工具，部分支援多種關聯式資料庫，可以直觀的方式操作與閱讀資料
    - 產品舉例
        - MySQL Workbench：MySQL附帶的官方介面，Win/Mac/Linux平台皆支援，但無內建中文介面
        - DBeaver：第三方開發的圖形化介面，同樣跨三大平台支援，支援簡體中文
        - phpMyAdmin：通常隨A(Apache)M(MySQL)P(PHP)開發工具組合使用，為網站形式，支援繁體中文
        - HeidiSQL：同為第三方介面，目前僅支援Windows，且常與MariaDB的安裝檔案搭配，支援繁體中文
- 備註： 若能取得遠端資料庫的主機名稱/IP、帳號、密碼、連接埠、資料庫名稱，可從本機連線存取

## 程式開發時的常見使用寫法
以筆者相對熟的Express.js與Laravel為例，[詳細比較可參考這篇](http://www.ayqy.net/blog/raw-sql-vs-query-builder-vs-orm/)
- 原生SQL語法，直接使用對應資料庫套件或框架的driver(驅動)，直接嵌入SQL語法執行查詢
    - 熟悉SQL語法者能便於精確執行，避免程式自動轉換的多餘語法
    - 但也沒有套件或框架提供的直接保護，需自行預防SQL注入等資安漏洞
- ORM(物件關聯對映)，如Laravel綁定的Eloquent、Express.js常用的Sequelize
    - 可直接使用後端開發的程式語法操作資料庫，甚至不需要使用到原生SQL語法
    - 但背後執行時仍會將程式碼轉換成SQL，轉換的步驟難免會耗損效能
- query builder(查詢構造器)，如Laravel內建、NPM套件knex
    - 語法特性介於前二者間，可以開發使用的程式語法，對應原生SQL的邏輯轉換
    - 比ORM更能直接對映實際執行的SQL語法，且可避免直接寫原生SQL的安全問題
    - 卻也不能替代原生SQL的所有語法組合，以及沒有ORM簡潔化的功能可用