[SQL ] 設計資料表的欄位

看板Database作者 (誠實面對自己吧!)時間8年前 (2015/11/28 12:23), 8年前編輯推噓1(102)
留言3則, 3人參與, 最新討論串1/1
資料庫名稱: MySQL 內容/問題描述: 最近在做一個收發包裹的系統 在設計資料表的時候遇到了一點問題 在一筆訂單中需要記錄使用者放在包裹裡的東西是什麼 主要有幾個分類: 1. 金錢: 需要記錄裡面放了多少錢 2. 物品: 一本書 一箱蘋果 之類的 3. 衣物: 上衣一件 褲子一件 4. 其他: 但是使用者給的東西未必只有 1-4 中的單一項 可能會有一筆訂單中包含: a. 金錢1000元(都是10元硬幣) b. 一箱香蕉 原本我的想法是把內容物都分開存 a 項 是一筆記錄 流水號 20151128001 b 項 是一筆記錄 流水號 20151128002 把兩個東西分開存 但對方要求這筆訂單不應該被拆成兩個資料 因此我想了另一個方法 我用4個 bit 來記錄訂單內容的資料 bit 類別 1 金錢 2 物品 4 衣物 8 其他 因此 0001 -> 1 就是 只有 金錢 0101 -> 5 就是 有 金錢+衣物 只是資料庫搜尋時 不知道有沒有辦法來搜尋這個記錄呢? 比如說我要查 金錢 那就把訂單類別取 2 的餘數 如果 > 0 那就把 > 0 的通通列出來 如果要查 衣物 那就取8的餘數 如果 > 3 那就把合乎條件的都列出來 如果要查 有物品又有衣物 那就比較麻煩 要先取8的餘數再檢查 是不是 = 5 或 =7 不知道這樣做法如何 這樣不知道可不可行 現在是改成用三個欄位來存 一個欄位存金錢 一個欄位存物品 一個欄位存衣物 一個欄位存其他需求 如果訂單內容沒有金錢 金錢那欄就保持 NULL 有資料就存金錢資料 XX元 搜尋時就檢查此欄位是不是 NULL -- -- ˙ ˙ ◥ ▲ 上吧,藍胖!! \' (OwQ ) ) ) ﹀ \ \ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.43.55.22 ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1448684632.A.78F.html

11/28 14:15, , 1F
master detail 分開存
11/28 14:15, 1F

11/28 16:17, , 2F
我原本也是打算這樣
11/28 16:17, 2F

11/28 20:06, , 3F
不利搜尋,每筆計錄都要算,索引用不上
11/28 20:06, 3F
※ 編輯: kattte (115.43.55.22), 12/01/2015 21:36:11
文章代碼(AID): #1MMInOUF (Database)