I think that your second edited schema is way too complicated. Have a look at this simplified version and if there are still problems from your perspective, let me know:
CREATE TABLE category
(
category_id INTEGER PRIMARY KEY,
category_name VARCHAR(25) NOT NULL -- ex. Burger, could be Small Burger &c.
);
And then you have the other tables:
CREATE TABLE order_ -- note TRAILING underscore, order is an sql keyword, always worth avoiding even though certain systems have tricks whic allow you to use the - NEVER DO THIS!
(
order_id INTEGER PRIMARY KEY,
table_id INTEGER NOT NULL, -- no FK, could be "bar" or "special", i.e banquet
main_server INTEGER NOT NULL, -- FK to staff table
final_bill DECIMAL(5,2) NOT NULL, but can be 0 for special arrangement
order_note text -- notes good or bad (ex. food sent back)
order_final_bill -- computed/virtual field
);
CREATE TABLE order_item
(
item_id INTEGER NOT NULL, -- FK to item table
item_category NOT NULL, -- FK to category table
item_desc VARCHAR(25) NOT NULL, -- FK to item table
item_price DECIMAL(5,2) NOT NULL,
item_cuisson VARCHAR(50), -- how item is cooked, i.e rare &c.
item_note TEXT -- extra info, allergies, change of sauce &c.
);
Not sure why you want an historical trail of item prices - restaurants are normally moving to fast for this to be of great interest - seasonal changes in pricing, fashion. Prices might even be determined on a weekly basis, e.g. before and just after Christmas and then into New Year (quiet time).
I would have an old_price table and when an item chages price, use a trigger to put in the item_id, the price_date_from and price_date_to as follows:
CREATE TABLE old_price
(
item_id INTEGER NOT NULL,
item_price DECIMAL(5,2) NOT NULL,
price_date_from DATE NOT NULL,
price_date_to DATE NOT NULL
);
Something else - sometimes the same dish can have different prices at different times on the same day (lunchtime or dinner) or even at the same service depending if it's on a fixed menu or à la carte. I think, again, there's overcomplication here. A manager/owner who's fixing prices on a Monday morning won't really care about the price 3 weeks ago. All they'll care about is how much they're paying for goods this week and what the turnover will be. Just a few thoughts and don't foget YAGNI!
Best of luck with your project. You might also want to use a search engine to look at Open Source restaurant systems out there and see what you can learn!
p.s. SQL is untested (commas, semicolons) &c. Finally, if this is a new project, I would strongly urge you to look at PostgreSQL instead of MySQL - it's a vastly superior database!