Storing OOP data in a Mysql DB

the_b1ackfox
the_b1ackfox used Ask the Experts™
on
Hello experts,

I am working on an expert system which will run through a website I have in development.  The purpose is to provide step by step instructions based on Project by state, so no matter who is working the queue, we end up with a consistent build.  So this question is based in OOP theory and how to bring about a result (storing the data in a database...  Because if you can put it in there...  I can retrieve it... hopefully, lol.  So I am going to use a dumb made up example so I don't give up the secret sauce.  So lets go with cake.   Bob is our baker, and Karen is our master chef.  Karen has checked with each state law on how to make each specific kind of cake that we have seen, and we need to consider a default outcome for recipies she hasn't seen.

So Bob looks in his queue and sees a ticket to make a Strawberry Cake in Colorado.  Karen has predefined that Bob need to 1) pour batter A  into 2 baking pans, 2) bake the cakes 3) ice the middle using frosting C and then 4) send to shipping.  Bob see's the "preflight" instructions and follows them diligently.   Bob once again looks in his queue and sees a ticket for a Strawberry Cake in Hawaii  (State law says we have to use batter B (gluten free)).  Karen has predefined that Bob need to 1) pour batter B  into 2 baking pans, 2) bake the cakes 3) ice the middle using frosting C and then 4) send to shipping.  

A ticket can have up to 3 cakes on it ever,  And Karen needs to be notified whenever there is a request that does not have a preflight instruction.  

So if you have read through all of that, how would you design the database to hold the data?
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
David FavorFractional CTO
Distinguished Expert 2018

Commented:
Likely best to store your data as JSON.

So your data will... just be data... Your code will be OOP to pack/save/retrieve/unpack/use your JSON data.

You can also use other data forms like YAML + MySQL provides a huge amount of built in intelligence around JSON data.
Dave BaldwinFixer of Problems
Most Valuable Expert 2014

Commented:
Before you can design the database, you have to decide how you are going to recognize the conditions involved in making the decisions.  It looks to me like your selection process needs to list the available recipes along with 'Other' which is the condition where Karen gets notified.  That's the simple version.  Maybe a form that includes the necessary options for doing the data lookup.
the_b1ackfoxTechnophile

Author

Commented:
The condition for notification will be pretty easy...  Cake+state has no recipe then notify Karen.  We'd use a form to capture the cake requests, and Karen would also have a form to assign steps for the Cake+State combo
Angular Fundamentals

Learn the fundamentals of Angular 2, a JavaScript framework for developing dynamic single page applications.

So when new cake request is done (new order), Karen should receive a notification  to check the order then she will need to add and assign the steps when this done this should change the order status let say to Assigned...
So the order may have several status, New, Assigned, Cook, Delivered ext....
Then you can check with a cron job every x (hours) to check if Karen have done the part of job let say if an order still have the "New" state
by checking the status of the order.
David FavorFractional CTO
Distinguished Expert 2018

Commented:
You can use CRON, as lenamtl suggested.

Sometimes more immediate/realtime notifications are required.

For this, you'll use triggers to run some external script.

Tip: Plumb your triggers to run some given single script, passing verbs to one script to invoke given actions.

This collects all code into a single script. Then if required, have your trigger script dispatch other scripts.

Taking this approach means you have a single dispatching script run for all triggers, which provides a common setup for adding new triggers + tends to simplify debugging over time.
If you are not on Linux you can replace the cron job by Windows task management.

Or you can use MySQL Event Scheduler fantastic to use when available on PHPMyAdmin
the_b1ackfoxTechnophile

Author

Commented:
Thank you guys for your input into the whole process.  The developer I was working with went MIA for quite a while, and cause the whole project to lag.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial