sql >> Database >  >> RDS >> Mysql

De integriteit van gelinkte gegevensentiteiten bij update

Wat u moet doen, is de tafel laten zoals hij is. U heeft gelijk, u zou de klantinformatie in de factuur moeten opslaan voor de geschiedenis van waar de artikelen naartoe zijn verzonden. Als het verandert, moet u deze informatie NIET bijwerken, behalve voor eventuele facturen die nog niet zijn verzonden. Om dit soort informatie te behouden, hebt u een trigger nodig in de klantentabel die zoekt naar facturen die niet zijn verzonden en die adressen automatisch bijwerkt.

Als u historische versies van de klantinformatie wilt opslaan, is het juiste proces om een ​​controletabel te maken en deze via een trigger in te vullen.

Gegevensintegriteit is in dit geval eenvoudigweg via een externe sleutel naar de klant-ID. De id zelf mag nooit veranderen of mag door de gebruiker worden gewijzigd en moet een surrogaatgetal zijn, zoals een geheel getal. Omdat u de adresgegevens in de eigenlijke factuur niet zou moeten wijzigen (tenzij deze niet is verzonden, in welk geval u deze beter kunt wijzigen of het product naar de verkeerde plaats wordt verzonden), is dit voldoende om de gegevensintegriteit te behouden. Hierdoor kun je ook zien waar de spullen daadwerkelijk zijn verzonden, maar kun je nog steeds de huidige informatie over de klant opzoeken door middel van de externe sleutel.

Als u klanten hebt die veranderen (bedrijven gekocht door andere bedrijven), kunt u ofwel een proces op de server uitvoeren om het klant-ID van oude records bij te werken of een tabelstructuur maken die laat zien welke klant-ID's bij een huidig ​​bovenliggend ID horen. De eerste is gemakkelijker te doen als je het niet hebt over het wijzigen van miljoenen records.



  1. Django ORM lekt verbindingen bij gebruik van ThreadPoolExecutor

  2. Postgres-functie Einde lus en retourfout

  3. hoe geneste select op zend db te bouwen

  4. ORACLE-beperking om nulwaarde toe te staan, IF