簡體   English   中英

數據庫規范化和數據輸入(管理員后端)

[英]Database Normalisation and Data Entry (admin backend)

items下面的items表,因為您可以看到該表未標准化。 名稱應在單獨的表中進行規范化。

mysql> select * from items;
+---------+--------+-----------+------+
| item_id | cat_id | name      | cost |
+---------+--------+-----------+------+
|       1 |    102 | Mushroom  | 5.00 |
|       2 |      2 | Mushroom  | 5.40 |
|       3 |    173 | Pepperoni | 4.00 |
|       4 |    109 | Chips     | 1.00 |
|       5 |     35 | Chips     | 1.00 |
+---------+--------+-----------+------+

該表未規范化,因為在后端管理站點上,工作人員只需選擇一個類別並鍵入項目名稱即可快速添加數據。 非常快。 有數百個相同的項目名稱,但成本並不總是相同的。

如果我將此表標准化為如下形式:

mysql> select * from items;
+---------+--------+--------------+------+
| item_id | cat_id | item_name_id | cost |
+---------+--------+--------------+------+
|       1 |    102 |            1 | 5.00 |
|       2 |      2 |            1 | 5.40 |
|       3 |    173 |            2 | 4.00 |
|       4 |    109 |            3 | 1.00 |
|       5 |     35 |            3 | 1.00 |
+---------+--------+--------------+------+
mysql> select * from item_name;
+--------------+-----------+
| item_name_id | name      |
+--------------+-----------+
|            1 | Mushroom  |
|            2 | Pepperoni |
|            3 | Chips     |
+--------------+-----------+

現在,由於該表已被規范化,如何在管理后端(數據輸入的觀點)上添加項目(數據)? 我不想像下拉菜單一樣選擇商品名稱-會有成千上萬種不同的商品名稱-查找商品名稱並輸入費用需要花費大量時間。

需要有一種盡快添加項目/數據的方法。 有什么解決方案? 我已經用PHP開發了后端。

另外,編輯商品名稱的解決方案是什么? 工作人員可能會完全重命名商品名稱,例如:Fish Kebab改為Chicken Kebab,這將影響所有類別,而沒有意識到。 會有一些拼寫錯誤,可能需要更正,例如F1sh Kebab,應該是Fish Kebab(當表格標准化后,這很有用,我會看到每個類別的商品名稱都會更新)。

我不想像下拉菜單一樣選擇商品名稱-會有成千上萬種不同的商品名稱-查找商品名稱並輸入費用需要花費大量時間。

除下拉框外,還有用於選擇現有項目的選項。 您可以使用自動完成功能,並且僅接受已知值。 我只想清楚有一些UI友好的方法可以實現您的目標。

至於是否這樣做,則取決於您。 如果產品名稱略有不同,這是一個問題嗎? 像這樣的小數據完整性問題是否可以通過批處理作業解決?

根據系統設計,首先確定數據的外觀。 做出決定后,擔心構建UI的最佳方法。 就像我說的那樣,不管您的數據結構如何,都有可用的方法來設計UI。

我認為您最好使用當前的設計,因為您的名字是產品名稱,而不是類別名稱,您可能希望避免重命名單個產品會立即重命名它們的情況。

規范化是一件好事,但是您必須根據自己的特定需求對其進行衡量,在這種情況下,我確實不會像上面顯示的那樣添加額外的表item_name。

只是我的兩分錢:)

表應該代表什么依賴關系? 有什么鑰匙? 根據您所說的,我看不出您的第二個設計比您的第一個更標准化。

大概第一個設計中“名稱”的決定因素與第二個設計中“ item_name_id”的決定因素相同嗎? 如果是這樣,那么將名稱移動到另一個表將與您的項表滿足的普通格式沒有任何區別。

用戶界面設計與數據庫設計無關。 您不能讓UI驅動數據庫設計並期望獲得合理的結果。

您需要先驗證數據並檢查是否存在,然后再添加它以查看它是否為新值。

$value = $_POST['userSubmittedValue']

//make sure you sanitize the variable (never trust user input)

$query = SELECT item_name_id 
         FROM item_name 
         WHERE name='$value';

$result = mysql_query($query);
$row = mysql_fetch_row($result);

if(!empty($row))
{
//add the record with the id from $row['item_name_id'] to items table
}
else
{
//this will be a new value so run queries to add the new value to both items and item_name tables
}

需要有一種盡快添加項目/數據的方法。 有什么解決方案? 我已經用PHP開發了后端。

用戶界面問題和數據庫結構是獨立的問題。 對於給定的數據庫結構,通常存在幾種用戶友好的方式來呈現和更改數據。 數據完整性來自數據庫。 用戶界面只需要知道在哪里可以找到唯一的值。 程序員決定如何使用這些唯一值。 您可以使用下拉列表,彈出搜索表單,使用自動完成功能,將用戶鍵入的內容與數組中的元素進行比較,或者查詢數據庫以查看該值是否已存在。

從您的描述開始,聽起來好像您有一個非常快速的添加數據的方法:“工作人員只需選擇一個類別,然后鍵入項目名稱即可快速添加數據”。 (用“ 1”代替“蘑菇”與規范化無關。)

另外,編輯商品名稱的解決方案是什么? 工作人員可能會完全重命名商品名稱,例如:Fish Kebab改為Chicken Kebab,這將影響所有類別,而沒有意識到。

您允許錯誤的人編輯商品名稱。 說真的

在每個數據庫應用程序中都會出現這種問題。 只允許受過訓練且值得信賴的人進行此類更改。 (有關GRANT和REVOKE的信息,請參見您的dbms文檔。另請參閱ON UPDATE RESTRICT。)

在工作的生產數據庫中,我可以插入新的州(美國),也可以將現有的州名稱更改為所需的名稱。 但是,如果我將“阿拉巴馬州”更改為“吉爾吉斯斯坦”,我將被解雇。 因為我應該比做那樣的事情更了解。

但是,即使我是管理員,也無法編輯舊金山地址並將其郵政編碼更改為“ 71601”。 數據庫“知道”“ 71601”不是舊金山的有效郵政編碼。 也許您也可以在數據庫中添加一個或兩個表。 我無法從您的描述中得知類似的方法是否會對您有所幫助。

在不是管理員的系統上,我希望沒有權限將行插入狀態表。 在其他表中,我可能有權插入行,但沒有更新或刪除行的權限。

會有一些拼寫錯誤,可能需要更正,例如F1sh Kebab,應該是Fish Kebab

這課是一樣的。 應該允許某些人更新items.name,而有些人則不應。 撤消權限,限制級聯更新,使用更多表提高數據完整性或增加培訓。

暫無
暫無

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

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