Projektowanie tabel - produkty w zamówieniu

0

Mam dwie tabele: produkty i produkty w zamówieniu.
Dla każdego produktu potrzebuję dodać pewien atrybut, którego dane będą przechowywane w osobnej tabeli o nazwie atrybut.
Po złożeniu zamówienia następują wpisy do tabeli produkty w zamówieniu na zasadzie powiązania z tabelą produkty.
Mój atrybut może zostać zmieniony po wykonaniu zamówienia, wówczas jego aktualizacja następuje jedynie w powiązaniu z tabelą produkty, produkty w zamówieniu nie ulegają zmianie.

Mam na to dwie koncepcje:

  1. Zawarcie atrybutu w jednej tabeli. Jednak boje się o to czy w przyszłości nie będzie kłopotliwe jej przeszukiwanie. Tabela z zamówieniami będzie szybko rosnąć, ponieważ dziennie tysiąc klientów może złożyć zamówienia a każdy klient może zamówić kilka różnych produktów.
    1
  2. Rozbicie na dwie tabele. Minusem jest redundancja danych, plusem przeszukiwanie ale liczba produktów w stosunku do liczby produktów w zamówieniu nie będzie stanowiła zbyt dużą część (przykładowo po roku może być 2-3 miliony produktów w zamówieniu a liczba produktów w sklepie ok. 100-200 tys.).
    2

Osobiście kierowałbym się jednak ku rozwiązaniu numer 1, proszę o opinię, wskazówki, wzorce czy można to bardziej znormalizować?

0

Czym teraz są produkty a czym produkty_w_zamowieniu? Czym się różnią że są w oddzielnych tabelach?

0

Tabela produkty określa liczbę sztuk dostępnych w sklepie wraz z informacjami o nich: nazwa, cena itd.

Tabela produkty w zamówieniu opisuje produkt przypisany do danego zamowienia.

Nie mam wpływu na strukturę tych tabel, tak zostały zaprojektowane przez twórców frameworka.

0

Po złożeniu zamówienia następują wpisy do tabeli produkty w zamówieniu na zasadzie powiązania z tabelą produkty.

Jeżeli atrybuty mają być edytowane oddzielnie to nie możesz ich (tylko) powiązać ale musisz skopiować ich wartość. Czyli rozwiązanie drugie.

0
Delor napisał(a):

Po złożeniu zamówienia następują wpisy do tabeli produkty w zamówieniu na zasadzie powiązania z tabelą produkty.

Jeżeli atrybuty mają być edytowane oddzielnie to nie możesz ich (tylko) powiązać ale musisz skopiować ich wartość. Czyli rozwiązanie drugie.

Rozwiązanie pierwsze też zadziała prawidłowo.
Przy zapisie produktu dodaję rekord, który jest powiązany z tabelą produktów.
Po złożeniu zamówienia dodaję ten sam rekord, który tym razem jest powiązany z tabelą zamówień.
W momencie ponownej edycji produktu zmieniam jedynie rekord powiązany z tabelą produktów.

2

A redundancja danych? W 2 tabelach mam wtedy te same kolumny.

Identyczne dane ale logicznie odnoszą się do różnych typów produktów. Dzielisz to dla zwiększenia wydajności.

0

Ok dziękuje, tak zrobię w takim razie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1