摘要:本文是數據庫設計案例分析題,圍繞醫藥銷售系統的數據庫架構展開,涉及反規范化設計的方法及解決數據不一致的方案,還包含Redis數據類型選擇與MySQL數據同步的問題,通過具體場景分析提升系統性能的策略。
閱讀以下關于數據庫設計的敘述,回答問題1至問題3。
案例場景
某醫藥銷售企業因業務發展,需要建立線上藥品銷售系統,為用戶提供便捷的互聯網藥品銷售服務。該系統除了常規藥品展示訂單、用戶交流與反饋功能外,還需要提供當前熱銷產品排名、評價分類管理等功能。通過對需求的分析,在數據管理上初步決定采用關系數據庫(MySQL)和數據庫緩存(Redis)的混合架構實現。
經過規范化設計之后,該系統的部分數據庫表結構如下所示。
供應商(供應商ID,供應商名稱,聯系方式,供應商地址);
藥品(藥品ID,藥品名稱,藥品型號,藥品價格,供應商ID);
藥品庫存(藥品ID,當前庫存數量);
訂單(訂單號碼,藥品ID,供應商ID,藥品數量,訂單金額)。
[問題1](9分)
在系統初步運行后,發現系統數據訪問性能較差。經過分析,劉工認為原來數據庫規范化設計后,關系表過于細分,造成了大量的多表關聯查詢,影響了性能。例如當用戶查詢商品信息時,需要同時顯示該藥品的信息、供應商的信息、當前庫存等信息。
為此,劉工認為可以采用反規范化設計來改造藥品關系的結構,以提高查詢性能。修改后的藥品關系結構為:
藥品(藥品ID,藥品名稱,藥品型號,藥品價格,供應商ID,供應商名稱,當前庫存數量);
請用200字以內的文字說明常見的反規范化設計方法,并說明用戶查詢商品信息應該采用哪種反規范化設計方法。
[問題2](9分)
王工認為,反規范化設計可提高查詢的性能,但必然會帶來數據的不一致性問題。請用200字以內的文字說明在反規范化設計中,解決數據不一致性問題的三種常見方法,并說明該系統應該采用哪種方法。
[問題3](7分)
該系統采用了Redis來實現某些特定功能(如當前熱銷藥品排名等),同時將藥品關系數據放到內存以提高商品查詢的性能,但必然會造成Redis和MySQL的數據實時同步問題。
(1)Redis的數據類型包括String、Hash、List、Set和ZSet等,請說明實現當前熱銷藥品排名的功能應該選擇使用哪種數據類型。
(2)請用200字以內的文字解釋說明解決Redis和MySQL數據實時同步問題的常見方案。
參考答案:
[問題1]
常見的反規范化技術包括:
(1)增加冗余列:增加冗余列是指在多個表中具有相同的列,它常用來在查詢時避免連接操作。
(2)增加派生列:增加派生列指增加的列可以通過表中其他數據計算生成。它的作用是在查詢時減少計算量,從而加快查詢速度。
(3)重新組表:重新組表指如果許多用戶需要查看兩個表連接出來的結果數據,則把這兩個表重新組成一個表來減少連接而提高性能。
(4)分割表:有時對表做分割可以提高性能。
用戶查詢商品信息應該采用:增加冗余列。
用戶查詢商品信息時,需要顯示藥品信息(藥品表中),供應商信息(供應商表),庫存信息(庫存表中),此時查詢的是藥品表,但表中缺了供應商的信息和庫存信息,可以通過增加冗余列的方式把這些信息并過來。以避免連接操作帶來的查詢性能下降。
[問題2]
完整試題+答案解析可點擊下方藍字獲取!
軟考備考資料免費領取
去領取
專注在線職業教育25年