iT邦幫忙

3

表單設計及資料紀錄

不好意思又來打擾各位前輩

目前想根據一張現有的格式設計成表單並且記錄至資料庫

但關於資料紀錄的方式及後續瀏覽時有點卡住

現有的格式大概長成這樣

quantity是物品數量,boxes是這些數量裝了幾個箱子,pallet是用幾個棧板裝這些箱子

解讀下來是

用一個pallet裝了12個箱子,然後這12個箱子裡面有item A 800個

用三個pallet裝了30個箱子,這30個箱子裡面有item B 1900個

用五個pallet裝了23個箱子,這23個箱子裡面包含:
佔了其中兩個箱子的item C 數量200個、一個箱子的item D 數量100個和item E 數量50個以及二十個箱子的item F 2000個

用九個pallet裝了84個箱子,這84個箱子包含四十八個箱子的item G 5000個以及三十六個箱子的item H 4300個

想請問的是

(1)關於建置的方向 或是 格式應該怎更改會更容易設計及記錄

(2)我在紀錄的時候該怎麼去做設計,系統才知道我用了N個pallet分別裝了哪些item

先謝謝各位前輩抽空進來看我的問題!

5
dragonH
iT邦超人 6 級 ‧ 2020-06-16 16:56:51
最佳解答

切到最小單位來記錄

box pallet 改以編號紀錄

No item_name quantity box_no pallet_no
1 A 400 B1 P1
2 A 200 B2 P1
3 A 300 B3 P1
4 B 400 B3 P2
5 C 400 B4 P3
6 D 400 B5 P3
7 E 400 B6 P4

這樣甚至可以直接知道哪個 box 或 pallet 裝了哪些東西

數量那些計算就更不用說了

一般最好再加上包裝號碼或是訂單還是出貨單號碼的欄位
這樣去抓上一層的資料會比較好對的上,貨品包裝資料一般還是要跟訂單或出貨單去勾稽的

先謝謝兩位前輩提供的意見

一般最好再加上包裝號碼或是訂單還是出貨單號碼的欄位

有的,只是那些要記錄比較容易且明確

關於對box 和 pallet進行編號有想過
對每個進行編號可更詳細及完整資料
可是需求者覺得只是想做粗略的紀錄(類似統整,但沒更詳細的資料@@)
目前看起來還是需要進行編號才好做整理!

2
rogeryao
iT邦高手 1 級 ‧ 2020-06-16 17:26:13

由 NO 1,2 推估有多種箱子 :
1.定義每種箱子的代號,考慮材積,箱重
2.定義每個物品一單位的材積及淨重
3.定義每個物品使用哪個箱子,每箱可放多少數量
以上大致可用每個物品數量推算出各幾箱
4.定義每個棧板可放不同箱子各幾個(一個棧板放單一種箱子)
5.同一棧板上放置兩種以上的箱子較難處理,通常人工處裡(依現場作業的結果)

謝謝前輩提供的意見~
關於詳細的定義會再進行考慮及處理!

2
海綿寶寶
iT邦大神 1 級 ‧ 2020-06-16 17:27:46

我只會做到這樣

https://ithelp.ithome.com.tw/upload/images/20200616/200017871JMRy9vWgS.png

底下提供給一級屠豬士大大及其他高手拿去修改使用

SELECT it.item_name, it.quantity, bx.amount, pt.amount
FROM Item it
INNER JOIN Box bx ON it.boxid = bx.id
INNER JOIN Pallet pt ON it.palletid = pt.id
CREATE TABLE Pallet
    (`id` varchar(3), `amount` int)
;
    
INSERT INTO Pallet
    (`id`, `amount`)
VALUES
    ('P01', 1),
    ('P02', 3),
    ('P03', 5),
    ('P04', 9)
;


CREATE TABLE Box
    (`id` varchar(5), `palletid` varchar(3), `amount` int)
;
    
INSERT INTO Box
    (`id`, `palletid`, `amount`)
VALUES
    ('B0101', 'P01', 12),
    ('B0201', 'P02', 30),
    ('B0301', 'P03', 2),
    ('B0302', 'P03', 1),
    ('B0303', 'P03', 20),
    ('B0401', 'P04', 48),
    ('B0402', 'P04', 36)
;


CREATE TABLE Item
    (`item_name` varchar(1), `quantity` int, `palletid` varchar(3), `boxid` varchar(5))
;
    
INSERT INTO Item
    (`item_name`, `quantity`, `palletid`, `boxid`)
VALUES
    ('A', 800, 'P01', 'B0101'),
    ('B', 1900, 'P02', 'B0201'),
    ('C', 200, 'P03', 'B0301'),
    ('D', 100, 'P03', 'B0302'),
    ('E', 50, 'P03', 'B0302'),
    ('F', 2000, 'P03', 'B0303'),
    ('G', 5000, 'P04', 'B0401'),
    ('H', 4300, 'P04', 'B0402')
;
看更多先前的回應...收起先前的回應...

先謝謝前輩的幫忙~
原先有想過要分成兩個資料表進行處理
因為依照前輩的表格同樣的pallet感覺在表格中會發生不一樣的解讀
A、B物品沒什麼問題
但是C的pallet代表的不只是代表C物品的pallet數量,而是C~F這些合計共使用5個pallet/images/emoticon/emoticon06.gif

會再思考一下!

/images/emoticon/emoticon38.gif

但是C的pallet代表的不只是代表C物品的pallet數量,而是C~F這些合計共使用5個pallet.

這個表格設計會模糊掉資訊.
要能夠正確的反應真實情況,就不能這樣設計.多對多的情況,是要展開.
以這裡C~F 放到5個 pallet, 我們要有一個table, 每個pallet
都有獨立的id, 另外要有中介的 table, 這是多對多的重要關鍵,
這次的裝載,給一個裝載的號碼, C~F 的裝載部分都存放裝載號碼,
中介table 的裝載號碼再對應到 pallet 的五個id, 這樣會有五筆紀錄,若是使用 Postgresql 就可以用array, 一筆紀錄就可以了.

這只是片段的建議.

一級屠豬士
謝謝前輩提出來的建議與指點!
拿到現有的格式時只覺得有點怪怪的
經由前輩的提醒讓我能更明確知道這表格的缺失在哪裡!

我要發表回答

立即登入回答