iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0

Hi,大家好,今天是第5天,本日要接續昨天的資料庫部份,首先,先補充昨天尚未說完的資料庫的元件,下列是常用的資料庫元件,但是因為這次不打算用,所以只是快速的帶過而已

view

中文通常叫做視觀表,其實就是把SQL語法的執行結果變成一個虛擬的表格,可以針對view再進行資料查詢,算是很方便的東西,主要有2個用

  1. 可進行權限控管,若是有其他人要直接使用資料庫資源時,為了保護資料庫,除了區分帳號、權限之外,還可以將要開放其他單位使用的資料表以 view 的形式提供出去,把表格與欄位的資訊藏好藏滿,且通常view是無法寫入資料的,亦可以做為資料保護的用途。
  2. 若是資料的來源跨了多張資料表時,可以依照關聯建立起對應的view,方便查詢之用,例如可以將部門資料表與員工資料表結合起來變成部門+員工的view,這樣子在查詢時只要看一張 view 即可,對於使用者來說比較單純
    ** 但是view本身的效能並不好,讀取速度會比一般的資料表還慢,若是連結了複數的表格製作view 的話,會慢得很明顯,使用時需慎重考慮**

trigger

中文叫做觸發器(早期有的書用機翻翻成板機,讓人傻眼@@),可設定資料表在新增資料、刪除資料、修改資料時,需要進行什麼動作(例如說新增時同時新增其他表格,刪除前自動將該筆資料複製到別的地方以進行資料備份…等功能

store procedure

中文叫做預存程序,其實就是在資料庫中寫程式,是屬於資料庫的高階用法,讓資料庫不只是資料庫的東西XD,可以做到邏輯判斷、迴圈控制、排程作業等等需要開發程式才可以達到的功能,各家資料庫均有自己的預存程序語言,例如 SQL Server 的T-SQL、Oracle 的 plsql、PostgreSQL的ps/sql…等,會用的話可以讓資料庫做很多事,且若是和外部程式,例如java、c#相比,因為預存程序本身是在資料庫內部執行讀寫功能,同樣的資料吞吐量的話,預存程序的效能遠比用外部程式還好。


接下來進入本日的主題,資料庫的規劃,一般我在規劃資料庫時,會在訪談時索取紙本的表單,針對表單來分析與建立資料表,並製作SQL 文件與繪製實體關聯圖,但是這次的side畢竟全憑想象,所以就自己定議表格啦 XD

上圖就是初步規劃的實體關聯圖,如圖所示,目前預計以一個表格存放客服通報紀錄,每筆客服報有若千筆處理紀錄,以CASEID/MAINID建立關聯;每個使用者可輸入若干次處理紀錄

建立資料表時,使用SQL語法進行建立,並保留,這個動作最大的用意是若是要進行環境移植、重建時,有SQL就可以輕易重建了 不用到時候兵慌馬亂時還要找來找去,建立資料表時使用的是 CREATE TABLE 語法,其語法規則為
CREATE TABLE 資料表名稱 (
欄位名稱#1 資料型態,
欄位名稱#2 資料型態,…
CONSTRAINT 主鍵值名稱 PRIMARY KEY (主鍵值欄位)
);
若資料型態後方加入「NOT NULL」,表示該欄位不得為空
若加入 DEFAULT XXX,表示該欄位預設值為XXX

建立資料表的SQL語法如下

  1. 建立客服通報紀錄
CREATE TABLE CASES (
CASEID     VARCHAR(40) NOT NULL,             -- 主鍵,預計以UUID存放
FROMPER    VARCHAR(40),                      -- 通報人名稱
FROMMAIL   VARCHAR(30),                      -- 通報人信箱
FROMTEL    VARCHAR(60),                      -- 通報人電話
SYSTEMID   VARCHAR(5),                       -- 通報問題系統編號
LOGDATE    DATE,                             -- 通報日期
CASESTATUS VARCHAR(2) DEFAULT '00',          -- 處理情形 00:未處理  01:後送處理中 02:後送完成  10:結案
DIELINE    DATE,                             -- 完成期限
FINISHDATE DATE,                             -- 完成日期
CONSTRAINT CASES_PK PRIMARY KEY (CASEID)
);
  1. 建立處理流程紀錄
CREATE TABLE CIRCUIT (
CASEID     VARCHAR(40) NOT NULL,     -- 流程編號
MAINID     VARCHAR(40) NOT NULL,     -- 通報紀錄編號
USERID     VARCHAR(20) NOT NULL,     -- 處理人員帳號
FLOWDESC   VARCHAR(20) NOT NULL,     -- 流程說明
FLOWMEMO   VARCHAR(200),             -- 備註
STATUS     VARCHAR(2) DEFAULT '00',  -- 執行狀態 00 - 執行中   01 - 執行完畢
FLOWSDATE  DATE,                     -- 開始執行日期
FLOWEDATE  DATE                      -- 完成日期
CONSTRAINT CIRCUIT_PK PRIMARY KEY (FLOWID)
);

-- 建立外鍵,連接至 CASES 的 CASEID 欄位,並設定 CASES 資料修改或刪除時,CIRCUIT 會跟著動
ALTER TABLE CIRCUIT
    ADD CONSTRAINT CIRCUIT_FK FOREIGN KEY (MAINID)
    REFERENCES CASES (CASEID) MATCH SIMPLE
    ON UPDATE CASCADE
    ON DELETE CASCADE;
  1. 建立使用者資料表
CREATE TABLE USERS (
USERID     VARCHAR(20) NOT NULL,     -- 使用者帳號
PWDSTR     VARCHAR(500) NOT NULL,    -- 密碼欄位(存放加密密文)
USERLEV    INTEGER NOT NULL,         -- 權限等級 0:最低  99: 最高
LOCKED     VARCHAR(1) DEFAULT 'N',   -- 帳號已鎖定(連續登入失敗或異常行為可進行鎖定)
LOCKLIMIT  DATE,                     -- 帳號鎖定開放時間
DELETED    VARCHAR(1) DEFAULT 'N',   -- 帳號已刪除
USERSDT  DATE,                       -- 帳號啟用時間
USEREDT  DATE                        -- 帳號停用時間
CONSTRAINT USERS_PK PRIMARY KEY (USERID)
);

結語

今天完成了資料表的建立,並簡單的說明建立表格用的 sql 語法,create table 只是sql 的一小部份而已,明天會開始進行程式的撰寫,在撰寫過程中,會針對會用到的 select、insert、updte、delete 進行教學,目前預計明天會開始進行 node.js 的開發了


上一篇
Day 4 資料庫的規劃 基本知識#1
下一篇
開始寫程式了,node.js 的express 框架
系列文
以vue.js + node.js 搭建一個客服填單系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言