技術問答
技術文章
iT 徵才
Tag
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2024 iThome 鐵人賽
DAY
14
0
佛心分享-IT 人自學之術
從零開始的MySQL開發旅程
系列 第
14
篇
Day14 專題二 利用觸發器追蹤投票者資料異動(上)
16th鐵人賽
minhsiao
2024-09-01 23:36:40
423 瀏覽
分享至
專題二 建立資料庫與資料表
內容概要:建立投票資料庫來儲存選舉的資料,讓選務人員在需要的時候更改資料,並且要追蹤資料庫的異動情形,如此一來被輸入不良資料或因人為失誤輸錯資料時就可以根據紀錄來調查。設定這次要選舉的職務有市長、里長、縣長、立委、議員
做法:因為需要追蹤異動資料的情況,因此會需要建立
觸發器
,讓資料儲存前先檢查過,提升資料庫的品質。此外因為選舉資料會有較多的內容需要建立多個資料表,因此要加入條件約束,主要索引鍵與外部索引鍵來建立個個資料表間的關係
步驟一
建立資料庫voting
步驟二
製作實體關係圖(ERD)來釐清各資料表間的關係,以便加入條件約束(主要索引鍵或是外部索引鍵)
步驟三
建立資料表
資料表vote,選舉有投票資格的人。
用來儲存投票人的相關資訊,有性名、地址、轄區、縣、區、黨、投票位置、登記號碼
以voter_id作為主要索引鍵
voter_registration_num因登記序號不能有重複的,所以加入條件約束unique,避免出現重複值
其中除了voter_party外的資料欄都設定為not null,因為投票人不一定有黨籍因此可以是空值,而其他的若為空值會顯示錯誤
資料表ballot,投票人的選票
用來保存每張選票的相關資訊,有選票號碼、是哪一位投票人的選票、投入選票時間、投票的方式
以ballot_id作為主要索引鍵
以voter_id作為外部索引鍵(對應投票人資訊,資料表voter中的資料欄voter_id),且會加入條件約束unique,每一位投票人只有一張選票
ballot_cast_datetime為投入選票的日期時間,會設定為default,讓其預設值為now()會回傳當前日期時間
ballot_type表投票方式,加入條件約束check來確保資料欄中只會包含特定的值,這邊設定為in-person親自投票、absentee不在籍投票
資料表race,選票上的競選職務
用來儲存每項職務的相關資訊,有各項職務名稱、每項選民可投給幾名候選人
以race_id作為主要索引鍵
race_name加入條件約束unique,才不會加入重複的競選職務
資料表candidate,各項候選人
用來儲存參與選舉的候選人資訊,有候選人編號、候選人參與什麼職務選舉、候選人名字、候選人政黨
以candidate_id作為主要索引鍵
candidate_name加入條件約束unique才不會有重複的候選人出現
以race_id作為外部索引鍵(對應參選職務,資料表race中的資料欄race_id)
資料表ballot_candidate,投票人在選票上圈選的人
用來追蹤投票人把票投給誰
為關聯資料表,引用資料表balllot的主要索引鍵ballot_id和資料表candidate的主要索引鍵candidate_id,因此這兩資料表彼此建立關係,候選人從同一張選票中只能獲得一票
ballot_id、candidate_id同時為主要索引鍵和外部索引鍵
下一章: 專題二 利用觸發器追蹤投票者資料異動(中)
留言
追蹤
檢舉
上一篇
Day13 專題一 利用檢視表保護薪資資料
下一篇
Day15專題二 利用觸發器追蹤投票者資料異動(中)
系列文
從零開始的MySQL開發旅程
共
30
篇
目錄
RSS系列文
訂閱系列文
2
人訂閱
26
Day26 Firebase Cloud Functions
27
Day27 Firebase Hosting
28
Day28 Hosting 實作練習
29
Day29 Cloud Firestore 實作練習
30
Day30 總結
完整目錄
熱門推薦
{{ item.subject }}
{{ item.channelVendor }}
|
{{ item.webinarstarted }}
|
{{ formatDate(item.duration) }}
直播中
立即報名
尚未有邦友留言
立即登入留言
iThome鐵人賽
參賽組數
902
組
團體組數
37
組
累計文章數
9659
篇
完賽人數
95
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
17th鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
windows server
linux
css
react
熱門問題
Esxi 8.0版本上的虛擬機器, 安裝的作業系統是Windows Server 2025, 確定輸入的密碼是正確的, 無法登入(顯示密碼錯誤)
想請教如何定義資料庫的Primary Key
【求助】顯卡/主板 支援 PCIe4.0 為何 Host to Device (H2D) 只剩 Gen1 速度 (0.5 GB/s) ?
請問今天鐵人賽的發文系統是否故障?
Windows GPO Bitlocker
HP iLo Advanced trial license
在線求大神,千奧軟體主機怎麼安裝
Docker Compose 建立 GitLab 容器,執行器 Runner 運行流水線問題
windows server無法使用gpedit.msc
Java證照題目(main() method)
熱門回答
Esxi 8.0版本上的虛擬機器, 安裝的作業系統是Windows Server 2025, 確定輸入的密碼是正確的, 無法登入(顯示密碼錯誤)
想請教如何定義資料庫的Primary Key
Windows GPO Bitlocker
【求助】顯卡/主板 支援 PCIe4.0 為何 Host to Device (H2D) 只剩 Gen1 速度 (0.5 GB/s) ?
windows server無法使用gpedit.msc
熱門文章
[為你自己學 Gemini CLI ... 的原始碼] 第 1 天,從黑黑的畫面開始!
[為你自己學 Gemini CLI ... 的原始碼] 第 2 天,主程式裡的 Hello Kitty!
[為你自己學 n8n] 第 2 天,挑個風水寶地,養你的自動化小精靈!
0x01 / HTTP.予咱一切的基礎崩·去.Smuggling
第30天,完賽心得 / 葉家藥燉排骨 在地排隊美食(新北板橋)| 30天滷肉飯
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}