Tek bir MySQL arka arkaya birden fazla ürün?

2 Cevap php

MySQL + PHP kullanarak, bir MySQL veritabanında tek bir restoran order için çeşitli food_item s saklamak istiyorum.

İki tablo var: orders & food_items,

Birçok food_item_ids, tek bir order saklanacaktır.

Ben sadece orders_table yılında food_item_id s depolamak için en iyi yaklaşım nedir, merak ediyorum?

Ben orders tablonun ayrı bir satırda her food_item_id saklamak, ya da tek bir satır içine belirli bir tarikatın food_item_ids tüm koymalısın?

2 Cevap

Eğer 3NF (ve sürece kadar performans bulmak gereken bir sorundur) istiyorsanız, ya gerekir:

  • (food_items başına sipariş tablo ise) food_item tablodaki her satırda sipariş kimliğini saklamak;
  • (food_items sipariş edebilirsiniz sadece olası şeyler ise) veya çok-çok ilişkisi kullanın.

Ilk seçenek ile, böyle bir şey yeterli olacaktır:

Orders:
    order_id
    other stuff
FoodItems:
    order_id
    item_id
    other stuff.

İkinci seçenek için ayrı bir tablo çok-çok ilişkisi sunar:

Orders:
    order_id
    other stuff
FoodItems:
    item_id
    other stuff.
FoodItemsInOrder:
    order_id
    item_id
    count

Benim düşünceme göre, all veritabanı tabloları üçüncü normal formda dizayn edilmelidir. Eğer masa performans sorunu olabilir ki çok büyük olur (ve o very büyük olmak zorunda olacak) sonra, o zaman hız için de-normalizasyon düşünmeye başlayabilirsiniz.

Bir restoran için, her yerde de-normalize gerektirecek yeterince büyük alma sipariş ve gıda maddesini tabloları hayal edemiyorum.

Her gıda maddesini belirli bir düzen için benzersiz değilse, o zaman sonra bu gibi sorgulayabilir, food_items tabloda sipariş Kimliğini saklamak gerekir:

SELECT orders.id, food.id
FROM orders
INNER JOIN food ON orders.id = food.order_id

Ancak standart gıda maddeleri varsa, örneğin "Burger", "cips", "hot dog" sonra üç tabloları kullanmalısınız. Siparişler için, biri gıda maddeleri için tek ve iki katılmak için bir:

SELECT orders.id, food.id
FROM orders
INNER JOIN orders_food ON orders.id = orders_food.order_id
INNER JOIN food ON orders_food.food_id = food.id