資料庫擴展性設計:使用二進位解決一條記錄關聯多個狀態的問題

来源:http://www.cnblogs.com/itfly8/archive/2016/11/14/6062757.html
-Advertisement-
Play Games

程式開發中,經常遇到一條記錄有多個狀態位,比如一條商品,他屬於熱門,新品,特賣。我們的資料庫如何設計呢? 一般有幾種方法 (1)建立關聯表 關聯表欄位:關係Id,商品Id,屬性Id 查詢:使用關聯表的方式,查詢某屬性的商品。 程式:寫入時,寫商品表和關聯表; (2)將多個屬性存在一個欄位中,用|分割 ...


程式開發中,經常遇到一條記錄有多個狀態位,比如一條商品,他屬於熱門,新品,特賣。我們的資料庫如何設計呢? 一般有幾種方法 (1)建立關聯表 關聯表欄位:關係Id,商品Id,屬性Id 查詢:使用關聯表的方式,查詢某屬性的商品。 程式:寫入時,寫商品表和關聯表;   (2)將多個屬性存在一個欄位中,用|分割 狀態存儲在一個欄位中,比如某條商品屬於熱賣,新品和特賣,則欄位存儲的值:01|02|03 SQL查詢:使用like 程式處理:(1)取值需要先將01,02,03分割,再處理。(2)寫入需要先將01,02,03組合為一個字元串再存儲。   以上兩種方法可以可以解決多個狀態關聯的問題,但是存在以下問題 (1)增加了表和程式複雜度; (2)需要改代碼,不利於擴展;   有沒有更好的方法,處理一條記錄多個狀態的問題呢? 使用二進位位,每個位置,代表一個狀態,多個位置代表多個狀態,存儲的時候轉換為int類型存儲。   以產品屬性存儲為例。 熱門:0000 0001 新品:0000 0010 特賣:0000 0100   多個狀態的組合 熱門+新品:0000 0011 熱門+特賣:0000 0101 熱門+新品+特賣:0000 0111   存儲時將二進位轉換為int數值。   二進位位的查詢 以Oracle為例,使用bitadd函數,如: SELECT * FROM T_PRODUCT WHERE bitand(property,1)=1   java中對二進位位的處理 1)是否包含:&與運算符,比如:(1&3)==1 2)組裝:|或運算符,比如 1|2=3   如果再擴展,清倉狀態,可以使用 0000 1000   二進位實現的好處 以上內容講解了使用二進位位來表示狀態的方式,實現資料庫設計和程式調用。有以下好處 1)存儲精簡 2)擴展性強   缺點: 1)增加了理解複雜度;   以下是四個狀態情況的二進位與十進位存儲對照表:  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在討論這個問題之前,我們需要先區分unicode和UTF。 1. unicode :統一的字元編號,僅僅提供字元與編號間映射。符號數量在不斷增加,已超百萬。詳細:[https://zh.wikipedia.org/zh cn/Unicode] 1. UTF :unicode轉換格式 (unicode ...
  • [PHP];;;;;;;;;;;;;;;;;;;; About php.ini ;;;;;;;;;;;;;;;;;;;;; PHP's initialization file, generally called php.ini, is responsible for; configuring man ...
  • Bean的裝配: 在spring容器內拼湊bean叫做裝配。裝 配bean的時候,需要告訴容器哪些bean 以及容器如何使用依賴註入將它們配合在一起。 上下文定義文件的根元素是<beans>.<beans>有多個<bean>子元素。每個<bean>元素定義了一個 bean如何被裝配到spring容器 ...
  • 首先導入所需的jar包,項目目錄結構如下: 之後需要配置一下web.xml文件,內容如下: 然後配置applicationContext.xml: 下麵開始建立實體類User.java: 然後是控制層代碼: 這裡的value即訪問路徑,而return的"hello"通過applicationCont ...
  • 對比學習Python與Cstr1 = 'hello python 2'# 字元串i = 3.1415926535print(str1)print("hello python\n")# print 自帶換行符print('%s'%str1)print(str1)print("你好,%s OK %d" ... ...
  • 【轉載自】:http://blog.csdn.net/qq7342272/article/details/7940741 java運行時異常是可能在java虛擬機正常工作時拋出的異常。 java提供了兩種異常機制。一種是運行時異常(RuntimeExepction),一種是檢查式異常(checked ...
  • 多態成員變數的特點: 運行結果: 圖解: java中,子類的實例對象在堆記憶體中的存放應如圖所示,既有子類的成員變數,又有父類的成員變數; 同一對象可以有多態,當父類變數指向時,從A入口進入,可以訪問父類的所有成員變數;當子類變數指向時,從B入口進入,可以訪問子類的所有成員變數和父類非同名變數; ja ...
  • QThread Qt Gui frozen 未響應 阻塞 processEvents ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...