Yang perlu Anda lakukan adalah meninggalkan meja apa adanya. Anda benar, Anda harus menyimpan informasi pelanggan dalam faktur untuk mengetahui riwayat pengiriman barang. Ketika berubah, Anda TIDAK boleh memperbarui informasi ini kecuali untuk faktur apa pun yang belum dikirim. Untuk mempertahankan jenis informasi ini, Anda memerlukan pemicu di tabel pelanggan yang mencari faktur yang belum dikirim dan memperbarui alamat tersebut secara otomatis.
Jika Anda ingin menyimpan versi historis informasi klien, proses yang benar adalah membuat tabel audit dan mengisinya melalui pemicu.
Integritas data dalam hal ini hanya melalui kunci asing ke id pelanggan. Id itu sendiri tidak boleh diubah atau diizinkan untuk diubah oleh pengguna dan harus berupa nomor pengganti seperti bilangan bulat. Karena Anda tidak boleh mengubah informasi alamat dalam faktur yang sebenarnya (kecuali jika belum dikirim dalam hal ini Anda sebaiknya mengubahnya atau produk akan dikirim ke tempat yang salah), ini cukup untuk menjaga integritas data. Ini juga memungkinkan Anda untuk melihat di mana barang-barang itu sebenarnya dikirim tetapi tetap mencari info terkini tentang klien melalui penggunaan kunci asing.
Jika Anda memiliki klien yang berubah (perusahaan yang dibeli oleh perusahaan lain), Anda dapat menjalankan proses di server untuk memperbarui id pelanggan dari catatan lama atau membuat struktur tabel yang menunjukkan id klien mana yang dimiliki oleh id induk saat ini. Yang pertama lebih mudah dilakukan jika Anda tidak berbicara tentang mengubah jutaan rekaman.