簡體   English   中英

如何正確組織MySQL數據庫中的相關表?

[英]How to properly organize related tables in MySQL database?

有兩個表 - 用戶和訂單:

ID 訂單數量_總計
1 瓊斯 5634200
2 麥克風 3982830
ID 用戶身份 訂單金額
1 1 200
2 1 150
3 2 70
4 1 320
5 2 20
6 2 10
7 2 85
8 1 25

這些表由用戶 ID 鏈接。 任務是為每個用戶顯示他所有訂單的總和,可能有數千個(訂單),也可能有數萬個,同時可能有成百上千的用戶同時發出請求。 有兩種選擇:

  1. 對於每個新訂單,除了寫入訂單表外,增加 orders_amount_total 計數器,然后簡單地將其顯示給用戶。
  2. 刪除 orders_amount_total 字段,並使用表 JOIN 顯示所有訂單的總和,並使用 SUM 運算符計算特定用戶的所有訂單的總和。

哪個選項更好用? 為什么? 為什么另一個選項不好?

PS我認為第二個選項簡潔正確,鑒於數據庫是關系型的,但對服務器上的負載存在強烈懷疑,因為即使對於一個用戶計算量時的樣本也很大,並且有很多他們。

選項 2. 對於絕大多數情況是正確的。

選項 1. 會導致可能導致不一致的數據冗余。 使用選項 2. 您可以安全地始終獲得正確的值。

是的,非規范化表可以提高性能。 但這是最后的手段,需要格外小心。 “數萬”行對於 RDMBS 來說並不是一個特別大的集合。 它們旨在處理甚至數百萬甚至更多。 所以你似乎離最后的手段還很遠,應該選擇選項 1. 和適當的索引。

我同意@sticky_bit 選項 2. 比 1 更好。還有另一種可能性:

創建一個VIEW ,它是JOIN / SUM查詢的預定義調用。 智能 DBMS 應該能夠推斷出每次更新orders表時,它還需要為user_id調整orders_amount_total

順便說一下你的架構設計:不要命名列id 不要在兩個不同的表中使用相同的列名,除非它們的意思相同。

暫無
暫無

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

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