Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [bazy danych][wzorce] Relacyjność i dane 'historyczne'
JohnnyB
post
Post #1





Grupa: Zarejestrowani
Postów: 76
Pomógł: 19
Dołączył: 19.01.2010

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Dubluje się kolumny i taka denormalizacja jest najłatwiejsza a zarazem bardzo prosta i elegancka.


--------------------
Go to the top of the page
+Quote Post
phpion
post
Post #3





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 09:24