# 關聯式資料庫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簡潔化的功能可用