Ada dua tabel:
- Pengguna
- Alamat
Pengguna berisi referensi ke Alamat.
Alamat berisi kolom CreatedBy dan ModifiedBy, yang merujuk pada Pengguna.
Bagaimana cara mendesain database ini untuk menghindari ketergantungan siklik?
database-design
Shashi
sumber
sumber
Jawaban:
Alih-alih mencari tips dan trik (termasuk kendala yang ditangguhkan), saya sarankan Anda mendesain jalan keluar dari "kunci referensi" ini - jadi cobalah sesuatu seperti ini:
Fakta
(UserID)
ada.(AddressID)
dibuat oleh Pengguna(UserID)
.(AddressID)
dibuat pada Tanggal(DateCreated)
.(AddressID)
terakhir diubah oleh Pengguna(UserID)
pada Tanggal(ModifiedOn)
.(UserID)
berada di Alamat(AddressID)
sejak Tanggal(ValidFrom)
.Kendala
Each
Alamat dibuat olehexactly one
Pengguna .It is possible that more than one
Alamat dibuat olehthe same
Pengguna .Each
Alamat dibuat padaexactly one
Tanggal .It is possible that more than one
Alamat dibuat padathe same
Tanggal .For each
and
Tanggal Alamat ,that
Alamat diubah olehat most one
Pengguna padathat
Tanggal .For each
and
Tanggal Pengguna ,that
Pengguna berada diat most one
Alamat sejakthat
Tanggal .Logis
Sejauh menyangkut alamat wajib, verifikasi bahwa pada lapisan aplikasi dan bungkus pernyataan pemuatan menjadi transaksi - dengan cara itu Anda akan mendapatkan semua atau tidak sama sekali.
sumber
Anda tidak punya pilihan selain membuat ketergantungan siklik dalam 2 operasi seperti di bawah ini karena satu tabel tidak ada ketika Anda membuat yang pertama.
Jika Anda ingin menghindari ketergantungan siklik. Maka Anda perlu menghapus satu batasan REFERENSI atau Anda dapat menambahkan referensi DELETE dan UPDATE CASCADE dalam satu cara. Anda juga bisa mengimplementasikan TRIGGER jika logika Anda agak rumit.
sumber