Witam.
Pytanie czysto teoretyczne. Czy jest jakieś inne wyjście, nie korzystając z tabeli pomocniczej, aby połączyć np.: zamówienie z zamówionymi produktami?
Coś na wzór sklepu.
- Rejestracja:około 8 lat
- Ostatnio:około 2 miesiące
- Postów:87
W systemach ERP spotykam się jedynie z rozbiciem tego na kilka tabel:
1 - nagłowek dokumentu
2 - pozycje na dokumentach
3 - n - inne tabele powiązane VAT, ceny, status dokumentu/jego typ.
Jeśli miałoby to być na jednej tabelce byłoby to mega niepraktyczne.

- Rejestracja:ponad 18 lat
- Ostatnio:11 dni
To zależy z jakiej bazy danych korzystasz. Np. w MongoDB to chyba nie ma problemu umieścić wartość tablicową. Jeśli chodzi o relacyjną bazę danych (SQL) to potrzebujesz pomocniczej tablicy by zaimplementować połączenie wiele-wiele. Natomiast jeśli każdy element tablicy "zamówiony produkt" będzie przyporządkowany tylko do jednego zamówienia to nie ma problemu, w zamówionym produkcie umieszczasz referencję do zamówienia. Ewentualnie wchodzi ewentualnie w grę możliwość duplikowania "zamówionych produktów" dla każdego zamówienia, zmieniając tylko numer zamówienia. jak zamówiono.

- Rejestracja:ponad 7 lat
- Ostatnio:42 minuty
- Lokalizacja:Jastrzębie-Zdrój
- Postów:2156
Czyli jest "niby" inne wyjście, ale i tak to wymaga dodatkowej tabeli, ponieważ:
- Jeżeli zrobimy tabele Zamówienia i Produkty to trzeba zrobić tabele pomocniczą Zamówienia_Produkty w których wystarczy id_produktu i id_zamowienia + ilość i cena.
- Jeżeli zrobimy tabele Zamówienia i Produkty to trzeba zrobić tabele ProduktyNaZamowieniu, w których będą całe dane na temat produktu (skopiowane) + kolumna z id_zamowienia, ilosc, cena.
Druga opcja pozwala zachować historię jeżeli jakaś informacja na towarze została zmieniona. W pierwszym przypadku dostajemy zawsze aktualne dane produktu.
REASUMUJĄC
Wszystko sprowadza się do tego samego rezultatu, ale co jest lepsze w przypadku oprogramowania tego? Trudniej jest ogarnąć CRUD biorąc pod uwagę 1. punkt, czy 2.?

- Rejestracja:prawie 17 lat
- Ostatnio:około 5 godzin
- Postów:2792
Zawsze jest inne wyjście... Możesz mieć w tabeli zamówienia
tylko dwa pola: id
i xml
. Ale po co sobie utrudniać?


- Rejestracja:około 15 lat
- Ostatnio:około 3 lata
Podejście 1 jest lepsze z tego względu że masz w miarę zachowana atomowosc. W drugim podejściu łamiesz postać moralna bazy. Po co przerzucać jakieś dane które masz w innych tabelach? Wystarczy informacja jakie zamówienie i jakie produkty na nim wraz z ich ilością.

- Rejestracja:ponad 7 lat
- Ostatnio:42 minuty
- Lokalizacja:Jastrzębie-Zdrój
- Postów:2156
No niby tak... Idąc głębiej, kopiowanie tych samych danych jest po to, aby zachować historię i spójność.
Przykład: myszka komputerowa (id 1) - wszystkie kolory (niebieski, czerwony, czarny). Po 3 miesiącach stwierdzamy, że jednak zrobimy kartotekę, w której będzie określony kolor. Dobrze by było zrobić 3 nowe, ale różni są ludzie i po co. Bierzemy myszkę o id 1 i zmieniamy na myszka komputerowa czarna. I teraz pytanie: Jaką myszkę sprzedałem 3 miesiące temu? Zamówienie pokaże, że czarną, ponieważ zaktualizowaliśmy ten produkt.
Ja wiem, że się czepiam szczegółów. Ja wiem, że to zależy od skali projektu, ale jakiś argument za i przeciw jest ;)
- Rejestracja:około 8 lat
- Ostatnio:około 2 miesiące
- Postów:87
AdamWox napisał(a):
No niby tak... Idąc głębiej, kopiowanie tych samych danych jest po to, aby zachować historię i spójność.
Przykład: myszka komputerowa (id 1) - wszystkie kolory (niebieski, czerwony, czarny). Po 3 miesiącach stwierdzamy, że jednak zrobimy kartotekę, w której będzie określony kolor. Dobrze by było zrobić 3 nowe, ale różni są ludzie i po co. Bierzemy myszkę o id 1 i zmieniamy na myszka komputerowa czarna. I teraz pytanie: Jaką myszkę sprzedałem 3 miesiące temu? Zamówienie pokaże, że czarną, ponieważ zaktualizowaliśmy ten produkt.
Ja wiem, że się czepiam szczegółów. Ja wiem, że to zależy od skali projektu, ale jakiś argument za i przeciw jest ;)
Z tym, że musisz pamiętać, że wystawiając korekty wszystkie dane o towarze musi pobrać sobie z fakturki, a nie kartoteki towarowej, bo wyjdą cyrki :D