台灣最大程式設計社群網站
線上人數
1034
 
會員總數:244584
討論主題:188715
歡迎您免費加入會員
討論區列表 >> MySQL >> 為了排序和搜尋方便,是否該在兩個資料庫存放相同資料?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
為了排序和搜尋方便,是否該在兩個資料庫存放相同資料?
價值 : 50 QP  點閱數:152 回應數:3

樓主

Susan Chen
門外漢
0 2
22 3
發送站內信

想請教大家一般的做法~~
假設我今天有兩個資料庫表,表一「商品資料」、表二「訂單資料」
而表一裡面有「品名、價格、進貨商、單位」將會成為表二的搜尋和排序的條件
我是該
1.在建立表二時也建立「品名、價格、進貨商、單位」欄位,在下語法時直接使用WHERE 和 ORDER BY就行了

2.表二只儲存表一商品序號(主鍵),使用LEFT JOIN和GROUP BY合併兩表來做搜尋及排序

我本來是想用方法1,但這樣變成在修改表一的「品名、價格、進貨商、單位」其中一欄時,表二也要同步修改,如果同一商品有好幾筆訂單,不就要改一堆資料~~

搜尋相關Tags的文章: [ PHP ] , [ MSYQL ] , [ 資料庫建立 ] , [ 搜尋 ] , [ 排序 ] ,
本篇文章發表於2019-04-12 15:20
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

缺氧的羊:窒息
捐贈 VP 給 缺氧的羊:窒息 檢舉此回應
很多時候, 的確是有必要特地在不同資料表中儲存相同資料的
(就是為了搜尋時可以減少不必要的join)
=======================

請google【反正規化】
=======================

最終要採用1還是2, 取決於你自己...
本篇文章回覆於2019-04-13 00:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
不錯的參考

彩虹
檢舉此回應
由於你剛好碰的是「產品 與 訂單」的關聯
我說明一下另一個部分

訂單資料表,建議你將「品名、價格、單位」建立欄位做儲存
因為消費者的「訂單資料」是不得被修改的,應保持原資料的完整性

你試想一個情境,假設這一筆訂單是「2019 年 1 月」的訂單,有「A 產品」,價格為「100」(當初所買的價格)
結果產品在「2019 年 4 月」,管理人員將品名改為「超值 A 產品」,價格改為「120」

這時候消費者查看歷史訂單時:
1.你覺得應該顯示原有的資料「A 產品」「100」還是「超值 A 產品」「120」
2.那訂單總金額又應該為多少?

因此,你產品資料的變動,不應該再回去修改訂單上的產品資料

本篇文章回覆於2019-04-14 10:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

Susan Chen
檢舉此回應
非常感謝兩位大大提供的觀念,兩個都對我很有幫助!!
本篇文章回覆於2019-04-15 10:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.