Database Design – Modeling Warehouse Picking

database-designschema

What's the best way to approach modelling a warehouse picking system?

To be precise, customers place orders which are processed by warehouse staff.

A simple products and orders database isn't an issue. My trouble comes breaking down orders into smaller warehouse trips. Tips are created based on the quickest route around the warehouse based on product locations. Two assistants can pick different parts of the same order (different trips), but they can also be picking multiple orders.

I can't wrap my head around how I'd make a simple model of this, I know I need to break an order down into a smaller order(s) based on whatever criteria (warehouse location in this case).

I think it'll be along the lines of (some obvious fields missing for clarity):

TRIPS {
TripID
AssitantID
SmallOrderID
}

ORDERS {
OrderID
ProductID
Quantity
}

SMALL_ORDERS { 
SmallOrderID
OrderID
}

I know this isn't right as the SMALL_ORDERS isn't broken down, I'm just duplicating ORDERS. Would I make SmallOrderID on the TRIPS table, contain multiple values or is this a bad idea?

This is solely for a self-learning programming project, I'm not looking for anything enterprise-like. It's a simple version of a major enterprise system we use where I work.

I'd be more than happy if anyone can tell me the correct type of schemes I should be googling for, I assume they must have a certain name.

thanks.

Best Answer

My first IT job was in this area - basically I was involved in a "fiddle" on the part of my employer to land a big contract which involved convincing the client that we had a functioning and "intelligent" order picking system. It involved alcholic beverages and there are many complex rules about these (tax reasons).

Anyway, I just wish that Open Source had been as prevalent then as it is now - because there appear to be a plethora of high-quality projects out there in this area. A quick Google landed me here and here - search for the word "pick" on these pages.

If I were you, what I would do is examine these (and others...) packages and see which ones correspond most closely to your needs - download and install them and then check out the underlying schemas and see which bits you can borrow for your project. Or you may just decide to implement one of the systems that's already out there?

What I do know is that the logistics behind these problems are very complex (operations research, tricky mathematics &c.), so you might be able to take some of the pain out of your project by "standing on the shoulders of giants"!

[EDIT]

You might like to check out this and its parent site- it specifically mentions bin-packing and employee rostering, so it might be of interest. I remember this from studying operations research. If you work in Java, it could be of interest - although the principles obviously apply to all languages.