技術問答
技術文章
iT 徵才
Tag
聊天室
2025 鐵人賽
登入/註冊
問答
文章
Tag
邦友
鐵人賽
搜尋
2024 iThome 鐵人賽
DAY
14
0
佛心分享-IT 人自學之術
從零開始的MySQL開發旅程
系列 第
14
篇
Day14 專題二 利用觸發器追蹤投票者資料異動(上)
16th鐵人賽
minhsiao
2024-09-01 23:36:40
434 瀏覽
分享至
專題二 建立資料庫與資料表
內容概要:建立投票資料庫來儲存選舉的資料,讓選務人員在需要的時候更改資料,並且要追蹤資料庫的異動情形,如此一來被輸入不良資料或因人為失誤輸錯資料時就可以根據紀錄來調查。設定這次要選舉的職務有市長、里長、縣長、立委、議員
做法:因為需要追蹤異動資料的情況,因此會需要建立
觸發器
,讓資料儲存前先檢查過,提升資料庫的品質。此外因為選舉資料會有較多的內容需要建立多個資料表,因此要加入條件約束,主要索引鍵與外部索引鍵來建立個個資料表間的關係
步驟一
建立資料庫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
組
累計文章數
19777
篇
完賽人數
529
人
看影片追技術
看更多
{{ item.subject }}
{{ item.channelVendor }}
|
{{ formatDate(item.duration) }}
直播中
熱門tag
看更多
15th鐵人賽
16th鐵人賽
13th鐵人賽
14th鐵人賽
17th鐵人賽
12th鐵人賽
11th鐵人賽
鐵人賽
2019鐵人賽
javascript
2018鐵人賽
python
2017鐵人賽
windows
php
c#
linux
windows server
css
react
熱門問題
桌機三更半夜自動開機不知在幹啥?是在下載還是在上傳資料?嚇死寶寶.去查設定我沒有設定在三更半夜更新或是掃毒呀!去查紀錄亦沒有當日凌晨的瀏覽紀錄,這到底是怎麼一回事,要如何查詢?是被安裝了病毒軟體?
碩士學歷能幫助我突破職涯天花板嗎?
群輝NAS套件Docker部署Outline
維護合約的合理性
如何讓Windows 11 Professional 開啟Synology DS925+網路芳鄰的速度加快?
librenms 25.4.0 重開機都要重新設定
Librenms ssl憑證檢查 通知方式-已解決
Exchange EMS掛掉導致Q信(2016)
熱門回答
碩士學歷能幫助我突破職涯天花板嗎?
維護合約的合理性
群輝NAS套件Docker部署Outline
桌機三更半夜自動開機不知在幹啥?是在下載還是在上傳資料?嚇死寶寶.去查設定我沒有設定在三更半夜更新或是掃毒呀!去查紀錄亦沒有當日凌晨的瀏覽紀錄,這到底是怎麼一回事,要如何查詢?是被安裝了病毒軟體?
librenms 25.4.0 重開機都要重新設定
熱門文章
資安入門與實務應用介紹 29:智能合約漏洞與加密貨幣詐騙案例分析
資安入門與實務應用介紹 28:APT(高階持續性威脅)攻擊解析與防範方法
C++開啟資料夾及檔案的方法
打造你的第一個 MCP Server:從概念到實作
TrueNAS:從入門到入土心得錄01
IT邦幫忙
×
標記使用者
輸入對方的帳號或暱稱
Loading
找不到結果。
標記
{{ result.label }}
{{ result.account }}