[SQL ] 設計資料表的欄位

作者: kattte (誠實面對自己吧!)   2015-11-28 12:23:48
資料庫名稱: 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
作者: konkonchou (卡卡貓)   2015-11-28 14:15:00
master detail 分開存
作者: kattte (誠實面對自己吧!)   2015-11-28 16:17:00
我原本也是打算這樣
作者: rockchangnew (rock)   2015-11-28 20:06:00
不利搜尋,每筆計錄都要算,索引用不上

Links booklink

Contact Us: admin [ a t ] ucptt.com