不好意思又來打擾各位前輩
目前想根據一張現有的格式設計成表單並且記錄至資料庫
但關於資料紀錄的方式及後續瀏覽時有點卡住
現有的格式大概長成這樣
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
先謝謝各位前輩抽空進來看我的問題!
切到最小單位來記錄
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 裝了哪些東西
數量那些計算就更不用說了
由 NO 1,2 推估有多種箱子 :
1.定義每種箱子的代號,考慮材積,箱重
2.定義每個物品一單位的材積及淨重
3.定義每個物品使用哪個箱子,每箱可放多少數量
以上大致可用每個物品數量推算出各幾箱
4.定義每個棧板可放不同箱子各幾個(一個棧板放單一種箱子)
5.同一棧板上放置兩種以上的箱子較難處理,通常人工處裡(依現場作業的結果)
我只會做到這樣
底下提供給一級屠豬士大大及其他高手拿去修改使用
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
會再思考一下!
但是C的pallet代表的不只是代表C物品的pallet數量,而是C~F這些合計共使用5個pallet.
這個表格設計會模糊掉資訊.
要能夠正確的反應真實情況,就不能這樣設計.多對多的情況,是要展開.
以這裡C~F 放到5個 pallet, 我們要有一個table, 每個pallet
都有獨立的id, 另外要有中介的 table, 這是多對多的重要關鍵,
這次的裝載,給一個裝載的號碼, C~F 的裝載部分都存放裝載號碼,
中介table 的裝載號碼再對應到 pallet 的五個id, 這樣會有五筆紀錄,若是使用 Postgresql 就可以用array, 一筆紀錄就可以了.
這只是片段的建議.
一級屠豬士
謝謝前輩提出來的建議與指點!
拿到現有的格式時只覺得有點怪怪的
經由前輩的提醒讓我能更明確知道這表格的缺失在哪裡!