iT邦幫忙

2026 iThome 鐵人賽

DAY 0
0
JavaScript

30天從零打造醫療資訊小系統系列 第 12 篇

Day 15|建立醫療資訊系統的 MySQL 資料庫

  • 分享至 

  • xImage
  •  

一、為什麼我們需要資料庫?

前幾天,我們已經可以讓使用者在網頁上填寫病患資料,再透過 Servlet 接收資料,最後交給 JSP 顯示。

但是,目前還有一個問題:資料並沒有真正儲存下來。

假設使用者今天輸入了一筆資料:

姓名:小明
性別:男
生日:2006-01-21
電話:0912345678

送出表單後,網頁可以顯示這些內容,但如果沒有把資料寫入資料庫,就無法靠目前的流程永久保存它。

因此,今天我們要開始認識 MySQL,建立醫療資訊小系統的第一個資料庫。

二、MySQL 是什麼?

MySQL 是一種關聯式資料庫管理系統,可以用來儲存、查詢、修改及刪除資料。

如果把我們的系統比喻成一家醫院:

  • HTML 是使用者操作的畫面。
  • Servlet 是負責處理請求的後端程式。
  • JSP 是呈現資料的網頁。
  • MySQL 則是保存資料的地方。

整個流程可以想成:

使用者輸入資料
↓
HTML 表單
↓
PatientServlet
↓
MySQL
↓
儲存病患資料

MySQL 會將資料按照我們設計的資料表結構保存,讓程式之後可以再把資料查詢出來。

三、建立第一個資料庫

今天先使用 MySQL Workbench 或你已經安裝好的 MySQL 工具操作。

開啟 SQL 編輯器,輸入以下指令:

CREATE DATABASE IF NOT EXISTS medical_system
CHARACTER SET utf8mb4;

按下執行後,就會建立名為 medical_system 的資料庫。

這裡有幾個重要觀念:

  • CREATE DATABASE:建立資料庫。
  • IF NOT EXISTS:如果資料庫已經存在,就不再重複建立。
  • medical_system:我們自己取的資料庫名稱。
  • CHARACTER SET utf8mb4:設定資料庫的字元編碼,讓中文等多種文字可以正常儲存。

MySQL 官方文件也提供 CREATE DATABASE 語法,用來建立資料庫。
參考:MySQL 官方文件:CREATE DATABASE

建立完成後,再執行:

USE medical_system;

這行的意思是:

接下來的 SQL 指令,都在 medical_system 這個資料庫中操作。

四、建立病患資料表

有了資料庫之後,還需要資料表才能存放病患資訊。

我們先建立一張名為 patient 的資料表。

CREATE TABLE IF NOT EXISTS patient (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
gender VARCHAR(20),
birthday DATE,
phone VARCHAR(20)
);

這段程式碼看起來比較長,但其實只是在定義資料表的欄位。

每個欄位代表什麼?

欄位 資料型態 用途
id INT 病患資料的識別編號
name VARCHAR(100) 病患姓名
gender VARCHAR(20) 性別
birthday DATE 出生日期
phone VARCHAR(20) 聯絡電話

其中有三個觀念值得特別記住。

  1. PRIMARY KEY

主鍵用來識別資料表中的每一筆資料。這裡選擇 id 作為主鍵,避免只靠姓名區分病患,因為不同病患可能有相同姓名。

  1. AUTO_INCREMENT

新增資料時,MySQL 會自動產生遞增的整數編號,不需要每次都手動填寫 id。

  1. NOT NULL

代表這個欄位不能是 NULL。我們把它用在 name,表示姓名是這個練習中必須提供的欄位。

CREATE TABLE、主鍵與欄位型態都是建立資料表的重要部分。
參考:MySQL 官方文件:CREATE TABLE

五、確認資料表有沒有建立成功

資料表建立完成後,可以執行:

SHOW TABLES;

如果建立成功,結果中應該會出現:

patient

接著執行:

DESCRIBE patient;

這個指令可以查看資料表的欄位名稱、資料型態,以及是否允許 NULL 等資訊。

如果看到 id、name、gender、birthday 和 phone,就代表我們已經建立好第一張資料表。

六、先手動新增一筆測試資料

在串接 Java 之前,我們可以先用 SQL 測試資料表是否正常運作。

輸入:

INSERT INTO patient
(name, gender, birthday, phone)
VALUES
('測試病患', '男', '2006-01-21', '0912345678');

這裡使用 INSERT INTO 新增一筆資料。

你可能會注意到,我們沒有填寫 id。

因為 id 設定了 AUTO_INCREMENT,所以 MySQL 會自動產生編號。

接著執行:

SELECT * FROM patient;

如果操作成功,就能看到剛剛新增的資料。

這時候,我們已經完成了:

  1. 建立資料庫。
  2. 建立病患資料表。
  3. 新增測試資料。
  4. 查詢資料表內容。

這些就是後續 CRUD 功能的基礎。

七、為什麼電話要使用 VARCHAR?

在設計資料表時,我一開始也可能會想:「電話看起來是數字,是不是應該使用 INT?」

但電話通常不需要拿來做加減乘除,而且可能包含開頭的 0、國際區碼或其他符號。

例如:

0912345678

如果把電話當成整數處理,就可能失去開頭的 0。

所以這裡使用:

phone VARCHAR(20)

讓電話以文字形式保存,比較符合實際用途。

這也提醒我們:資料型態不一定要依照外觀決定,而是要看資料真正的用途。

八、目前還沒有完成什麼?

雖然我們已經建立了資料庫,但目前 Java 程式還沒有真正連接 MySQL。

現在的系統是:

HTML
↓
Servlet
↓
JSP

接下來預計會發展成:

HTML
↓
Servlet
↓
MySQL
↓
JSP

當 Java 可以連接 MySQL 之後,使用者提交表單時,Servlet 就能把資料寫入資料庫;之後也能查詢資料,並交給 JSP 顯示。

另外,這次建立的只是練習用資料表,並非可以直接投入醫療現場的正式病患資料庫。真實醫療系統還需要更完整的權限管理、隱私保護、稽核紀錄與資料安全設計。

今日小結

今天,我們終於從網頁畫面進入資料儲存的階段。

我們建立了 medical_system 資料庫,也建立了第一張 patient 資料表,並透過 SQL 新增和查詢測試資料。

這些步驟看起來很基礎,但它們是整個系統的重要起點。

接下來,我們要思考一個問題:

如果資料庫已經建立好了,Java 要怎麼和 MySQL 溝通?

下一篇,我們就要開始認識 JDBC,讓 Java 程式真正連接資料庫。

Day 15 完成!


上一篇
Day 14|Session 是什麼?讓醫療資訊系統記住登入的人
系列文
30天從零打造醫療資訊小系統 共 12 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言