[英]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 鏈接。 任務是為每個用戶顯示他所有訂單的總和,可能有數千個(訂單),也可能有數萬個,同時可能有成百上千的用戶同時發出請求。 有兩種選擇:
哪個選項更好用? 為什么? 為什么另一個選項不好?
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.