Det du skal gøre er at forlade bordet, som det er. Du har ret, du bør gemme kundeoplysningerne på fakturaen for at få historik over, hvor varerne blev sendt til. Når det ændrer sig, bør du IKKE opdatere disse oplysninger undtagen for eventuelle fakturaer, som endnu ikke er afsendt. For at vedligeholde denne type oplysninger har du brug for en trigger på kundetabellen, der søger efter fakturaer, der ikke er afsendt og opdaterer disse adresser automatisk.
Hvis du vil gemme historiske versioner af klientoplysningerne, er den korrekte proces at oprette en revisionstabel og udfylde den via en trigger.
Dataintegritet i dette tilfælde er simpelthen gennem en fremmednøgle til kunde-id'et. Selve id'et bør aldrig ændres eller have lov til at ændres af brugeren og bør være et surrogatnummer såsom et heltal. Fordi du ikke bør ændre adresseoplysningerne på den faktiske faktura (medmindre den ikke er blevet afsendt, i hvilket tilfælde du hellere må ændre dem, ellers vil produktet blive sendt til det forkerte sted), er dette tilstrækkeligt til at bevare dataintegriteten. Dette giver dig også mulighed for at se, hvor tingene rent faktisk blev sendt, men stadig slå de aktuelle oplysninger om klienten op ved at bruge fremmednøglen.
Hvis du har klienter, der ændrer sig (virksomheder købt af andre virksomheder), kan du enten køre en proces på serveren for at opdatere kunde-id'et for gamle poster eller oprette en tabelstruktur, der viser, hvilke klient-id'er, der hører til et nuværende overordnet id. Den første er nemmere at gøre, hvis du ikke taler om at ændre millioner af poster.