mysql欄位設計 書 資料庫字段設計

2021-10-17 22:20:41 字數 917 閱讀 3477

一、上下架欄位

很多產品都有上下架的需求,比如商品管理,廣告管理,圖書管理等等。

一般我們都用乙個狀態字段來表示他的狀態來,不同的狀態下我們可以進行不同的業務操作。但有時候真實的狀態又與時間有關。某時間到了就上架,某時間到了就要下架。如果我們只用乙個狀態字段來表示狀態,那麼我們就需設計乙個定時任務,每隔很短的時間來判斷當前時間與設定時間的關係來變化狀態值。這樣狀態值就可以用多個值來表示直正的狀態。比如:待上架,已上架,已過期。

如果不用定時任務呢?那我們就要在使用時加上時間的判斷,這樣的話,狀態值可以就是兩個:下架、上架。至於上架又可分成"時間內"與"時間外"的,這個不在狀態字段裡體現。下圖分別表示只有開始時間與有開始時間和結束時間的兩種情況:

以前的另一種狀態設計,感覺比較麻煩:

二、is_del(邏輯刪除)字段

這個用於恢復一些誤操作,但不濫用。因為如果濫用(如每個表都設定乙個),那麼所有的查詢sql都要關注這個字段,誰又敢保證「都」都關注到字段呢。

如果確實有這樣的業務,那麼在「邏輯刪"時就要考慮相關表的資料。是要物理刪除?邏輯刪?不變化? 不變化的話,相關表的資料會不會被別的表關聯到?

關聯到了資料是不是就是邏輯錯誤?

如果is_del能放進state欄位,就不要拿出來,放進去就要考慮有沒有刪除狀態下還有別的狀態(比如有需求要取刪除的但曾經是顯示的),有就不能放進去。

三、冗餘欄位的設計

資料庫的設計正規化裡是不推薦冗餘欄位的,確實有它的道理。在實際操作中,有時為了效率要多設計乙個冗餘字段,那麼一定要考慮到,如果同步它的更新。是用事務,還是定時任務?

資料庫設計字段

型別 範圍 無符號 大小範圍 有符號 用途tinyint 0,255 1位元組 128,127 小整數值 smallint 0,65 535 2位元組 32 768,32 767 大整數值 mediumint 0,16 777 215 3位元組 8 388 608,8 388 607 大整數值 in...

mysql資料庫設計欄位不為空

起因,我設計資料庫的時候一般情況下預設是不願意讓字段為空的,因為is null這樣的話,是不走索引。所以我基本上設定了不為空。因為設定了不為空,所以sql也要和原來的is null 變成 之前用的逆向工程的andisnull查詢就會失效。初始化資料 走索引了,並且資料查詢出來了 沒有走索引,資料還沒...

mysql資料庫字段加密

linux version centos7.3 mysql vrsion mysql5.6.34 最近兩天,接到業務上乙個需求,需要對錶中的部分字段 比如手機號,email 進行加密,在檢視mysql的相關資料後,發現需要對資料庫中的部分字段加密,基本就只能從業務層面的角度來實現。大概提供了如下幾個...