我一直致力于一个项目,我需要在数据库中存储订单列表(本例中为Food)。
我一直在寻找存储这些列表的最佳方法,但我找不到任何方法。
目前,我正在将数据存储在phpMyAdmin / SQL中,并将订单存储为要打印的原始HTML。它有效,但必须有一种更有效的方式来存储这些订单。
订单看起来与此相似:
所以,我认为最好的是制作一个单独的表来保存订单,使其结构更好一点,但我无法找到一种可行的方法来处理不同长度的订单。否则,将它存储为JSON或数组并在JS中构建它会更好吗?
JSON示例:
{
"order_id": 666,
"orders": [{
"item": "Burger Meal",
"notes": ["Chips", "Water"]
},
{
"item": "Chicken Parma",
"notes": ["Lemonade"] //<-- Simpler to detect number of notes?
}]
}
TL; DR:在数据库中存储不同长度列表的最佳方法是什么?
答案 0 :(得分:1)
您创建一个order_items
表,每个订单中的每个项目都有一行,还有一个item_notes
表,每个记录都有一行。
CREATE TABLE order_items (
item_id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(32) NOT NULL,
order_id INT NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (item_id),
UNIQUE KEY (order_id, name),
CONSTRAINT FOREIGN KEY (order_id) REFERENCES orders(order_id)
);
CREATE TABLE item_notes (
note_id INT AUTO_INCREMENT NOT NULL,
text VARCHAR(100) NOT NULL,
item_id INT NOT NULL,
PRIMARY KEY (note_id),
UNIQUE KEY (item_id, text),
CONSTRAINT FOREIGN KEY (item_id) REFERENCES order_items(item_id)
);
然后,您可以通过加入获取有关订单的所有信息:
SELECT o.*, i.*, n.*
FROM orders AS o
LEFT JOIN order_items AS i ON o.order_id = i.order_id
LEFT JOIN item_notes AS n ON i.item_id = n.item_id
WHERE o.order_id = 666