iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
佛心分享-IT 人自學之術

從零開始的MySQL開發旅程系列 第 14

Day14 專題二 利用觸發器追蹤投票者資料異動(上)

  • 分享至 

  • xImage
  •  

專題二 建立資料庫與資料表

  • 內容概要:建立投票資料庫來儲存選舉的資料,讓選務人員在需要的時候更改資料,並且要追蹤資料庫的異動情形,如此一來被輸入不良資料或因人為失誤輸錯資料時就可以根據紀錄來調查。設定這次要選舉的職務有市長、里長、縣長、立委、議員
  • 做法:因為需要追蹤異動資料的情況,因此會需要建立觸發器,讓資料儲存前先檢查過,提升資料庫的品質。此外因為選舉資料會有較多的內容需要建立多個資料表,因此要加入條件約束,主要索引鍵與外部索引鍵來建立個個資料表間的關係
  • 步驟一
    • 建立資料庫voting
      https://ithelp.ithome.com.tw/upload/images/20240901/20168759Snpjnneiia.png
  • 步驟二
    • 製作實體關係圖(ERD)來釐清各資料表間的關係,以便加入條件約束(主要索引鍵或是外部索引鍵)
      https://ithelp.ithome.com.tw/upload/images/20240901/20168759ZVWxL9E1Ob.jpg
  • 步驟三
    • 建立資料表
      • 資料表vote,選舉有投票資格的人。
        • 用來儲存投票人的相關資訊,有性名、地址、轄區、縣、區、黨、投票位置、登記號碼
        • 以voter_id作為主要索引鍵
        • voter_registration_num因登記序號不能有重複的,所以加入條件約束unique,避免出現重複值
        • 其中除了voter_party外的資料欄都設定為not null,因為投票人不一定有黨籍因此可以是空值,而其他的若為空值會顯示錯誤
          https://ithelp.ithome.com.tw/upload/images/20240901/20168759PrKlkXFnE2.png
      • 資料表ballot,投票人的選票
        • 用來保存每張選票的相關資訊,有選票號碼、是哪一位投票人的選票、投入選票時間、投票的方式
        • 以ballot_id作為主要索引鍵
        • 以voter_id作為外部索引鍵(對應投票人資訊,資料表voter中的資料欄voter_id),且會加入條件約束unique,每一位投票人只有一張選票
        • ballot_cast_datetime為投入選票的日期時間,會設定為default,讓其預設值為now()會回傳當前日期時間
        • ballot_type表投票方式,加入條件約束check來確保資料欄中只會包含特定的值,這邊設定為in-person親自投票、absentee不在籍投票
          https://ithelp.ithome.com.tw/upload/images/20240901/20168759jALAPvZ0c1.png
      • 資料表race,選票上的競選職務
        • 用來儲存每項職務的相關資訊,有各項職務名稱、每項選民可投給幾名候選人
        • 以race_id作為主要索引鍵
        • race_name加入條件約束unique,才不會加入重複的競選職務
          https://ithelp.ithome.com.tw/upload/images/20240901/20168759mWKGipSG3h.png
      • 資料表candidate,各項候選人
        • 用來儲存參與選舉的候選人資訊,有候選人編號、候選人參與什麼職務選舉、候選人名字、候選人政黨
        • 以candidate_id作為主要索引鍵
        • candidate_name加入條件約束unique才不會有重複的候選人出現
        • 以race_id作為外部索引鍵(對應參選職務,資料表race中的資料欄race_id)
          https://ithelp.ithome.com.tw/upload/images/20240901/20168759EJX3qCGAOc.png
      • 資料表ballot_candidate,投票人在選票上圈選的人
        • 用來追蹤投票人把票投給誰
        • 為關聯資料表,引用資料表balllot的主要索引鍵ballot_id和資料表candidate的主要索引鍵candidate_id,因此這兩資料表彼此建立關係,候選人從同一張選票中只能獲得一票
        • ballot_id、candidate_id同時為主要索引鍵和外部索引鍵
          https://ithelp.ithome.com.tw/upload/images/20240901/20168759LrTXboNfjK.png

下一章: 專題二 利用觸發器追蹤投票者資料異動(中)


上一篇
Day13 專題一 利用檢視表保護薪資資料
下一篇
Day15專題二 利用觸發器追蹤投票者資料異動(中)
系列文
從零開始的MySQL開發旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言