簡體   English   中英

在不使用枚舉的情況下,從 MySQL 的一組預選數據中輸入數據的最佳方法是什么?

[英]Without using enums, what's the best way to enter data from a set of preselected data for MySQL?

例如,我要說我正在為虛構世界中的前任總統制作一個數據庫,在那里他們有 Windows 派對、Mac 派對、Debian 派對、Ubuntu 派對和 Unix 派對。 沒有其他政黨,但這可能會時不時地改變(沒有“獨立人士”)。 我想使用 PHP 的網絡抓取庫從列出這些數據的網站上抓取數據,但我擔心當他們在某個時候更改網站時可能會搞砸,並且如果我不小心輸入了以下條目以外的任何其他條目對 MySQL 使用char 因此,例如,如果網站Ubunta並輸入Ubunta而不是Ubuntu ,那會弄亂我的數據庫。

因此,不是從 PHP 端清理數據,我可以采取哪些步驟來確保除預先選擇的各方列表之外的任何其他條目都會吐出錯誤? 以下是我目前考慮的選項:

  • 我知道我可以使用enum數據類型,但我聽說並不真正推薦它。 我正在使用 Laravel 進行數據輸入,並且它在較新版本上得到支持,但我聽說enum本身並不是真正推薦的做事方式,尤其是在 mySQL 上。

  • 我也知道我可以使用 PHP 端驗證。 但是當有更多“預選選項”(例如國家/地區)時,我正在尋找更好的方法; 例如,對於 240 個條目,我不希望代碼具有類似if(country === "Afghanistan" || "United States" || ...)類的內容。 如果可以,我還想添加其他parties ,但我希望它是可維護的,這樣人們就不必搜索添加額外if條件的位置。

  • 我還看到我可以使用觸發器,但如果我要使用國家之類的東西,我想保持簡短。 我還必須手動更新這些觸發器,因為 Laravel 不支持構建觸發器函數並且必須執行DB::unprepared unprepared 。

  • 為這些partiescountries創建自定義數據表。 可能是最好的選擇,並且適用於較長的選項列表,例如country ,但對於較短的選項列表(例如party ,其中只有 5 個政黨)似乎完全沒有必要。 FOREIGN KEY用於SELECT語句會加速查詢而不是執行WHERE嗎?

MySQL 8.0.16 支持check約束。 那是一種選擇。

但是,如果值隨時間發生變化,您最好的選擇是參考表(您的最后一個選擇)。 正確聲明的外鍵約束正是您想要的。 將來添加新值就像在引用表中添加新行一樣簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM