Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [bazy danych][wzorce] Relacyjność i dane 'historyczne'
Forum PHP.pl > Forum > PHP
JohnnyB
najlepiej opiszę na przykładzie:

powiedzmy mamy tabelę faktury (id, id_kontrahenta, ...) oraz tabelę kontrahenci (id, nazwa, adres, nip ... )
dopisując nową fakturę korzystamy oczywiście z tabeli kontrahentów.

Teraz problem: jak rozwiązać kwestię zmiany danych kontrahenta, tak aby na już wystawionych dokumentach pozostały stare dane? Można oczywiście zdublować wszystkie kolumny tabeli kontrahenci w tabeli faktury (i, z tego co wiem, często tak się robi) ale to takie mało relacyjne rozwiązanie ... Inny pomysł to dodanie kolumny Arch enum('N','T'), ale przy bardziej skomplikowanych zależnościach trochę się wszystko gmatwa ...
Czy jest do tego jakieś wsparcie we frameworkach albo wzorce, które by pomogły nad tym bardziej zapanować?
wookieb
Dubluje się kolumny i taka denormalizacja jest najłatwiejsza a zarazem bardzo prosta i elegancka.
phpion
Chyba najbardziej elegancko jest zrobić taką strukturę:

Kod
kontrahent: [id, kod, aktywny, ...]
kontrahent_dane: [id, kontrahent_id, imie, nazwisko, ...]
faktura: [id, kontrahend_dane_id, ...]


Ostatni wpis w tabeli kontrahent_dane to aktualne dane kontrahenta, a w fakturach łączysz faktury nie z kontrahentami, a właśnie z kontrahent_dane.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.