[英]Best way to store a category name from php in a mysql table
我的項目是使用php和js編寫的使用mysql數據庫的網站。
我需要存儲一個帶有“類別”或“類型”的項目(找不到更好的名稱)。 每個項目只能有一個類別。
每個類別都有一個由php和javascript代碼使用的“名稱”(一種ID),例如“ hat”。
這些“名稱”硬編碼在php / javascript代碼中。 它們不是用戶定義的。 有一個已知的清單。 應用程序的新版本中可能會有新的“名稱”,最終可以刪除其中一些。
這是我考慮的解決方案:
這是我目前正在使用的解決方案。
該數據庫將如下所示:
項目
分類
缺點(對我而言):
該數據庫將如下所示:
項目
它具有刪除第一個解決方案的兩表查詢的優點,但是數據仍然是重復的,並且比以往任何時候都更難以對數據庫進行存儲。
該數據庫將如下所示:
項目
類別名稱和索引直接存儲在“項目”表中。 從查詢角度來看,我的印象是索引的行為與我先前使用的第二個表相同(具有僅查詢一個表和一個索引而不是兩個表和兩個索引的優點)
就性能和/或可維護性而言,最佳方法是什么? 還有另一種更好的方法嗎?
具有完整性約束會很好,但不是必須的。 (我可以通過其他方式解決此問題)
我發現了以下線程: php mysql-我是否應該將“類別名稱”字段添加到表中? ,但關系是多對多的,看起來像是類別的可變列表。 因此,這實際上不適用於我的情況。
這取決於,
您將擁有幾個類別,需要多久更新一次?
在添加Enum之前,我已經采用了這種方法,但是還在類中編寫了一個靜態方法並在其中存儲了有效名稱。
class Item{
public static function get_categories()
{
// only works in php >=5.4 otherwise use return array('Category1'...);
return [
'Category1' => 'Category1',
'Category2' => 'Category2',
'Category3' => 'Category3'
];
}
}
執行以上操作,您可以通過Item :: get_categories()輕松訪問數組,該數組應對應於數據庫中ENUM字段中的值。 如果需要添加更多類別,請將其添加到數據庫,然后添加到此功能。 您可以使用它來驗證用戶的選擇並生成javascript選項。
然而!!!!
您提到填充表的種子,這將無法輕松地為您更新ENUM。
我會使用一個ENUM,因為
1)。 易於設置2)。 這比將兩個表聯接起來要容易一些(但JOINS是學習中的王牌)3)。 如果您使用了輔助表,您(如您指出的那樣)必須先從該表中查找值,然后插入,或者如果下拉列表中使用了類別,則使用類別ID及其名稱來填充下拉列表(我會這樣)
最后的想法
除非您的站點非常繁忙,否則兩種方法(查找表和ENUM)的性能都可能會引起大麥的注意。 您仍然必須同時使用兩種版本來更新類別表,但是使用INSERT語句代替ALTER TABLE會稍微容易一些
無論您選擇哪種方式,如果您不喜歡它,更新代碼都將非常容易。
希望這會有所幫助,並祝你好運
記住保持簡單愚蠢的吻
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.