Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mewujudkan dan Menguatkuasakan Perhubungan Satu-dengan-Satu dengan Berkesan dalam Reka Bentuk Pangkalan Data dengan Warisan?
Cabaran: Struktur pangkalan data yang kompleks selalunya memerlukan perhubungan satu dengan satu. Senario yang melibatkan jadual Storage
pusat yang dipautkan pada kedua-dua jadual Van
dan Warehouse
menggambarkan cabaran ini. Bagaimanakah kami boleh mewujudkan dan mengekalkan perhubungan ini dengan berkesan, memastikan integriti data?
Strategi Warisan dalam Reka Bentuk Pangkalan Data:
Beberapa pendekatan wujud untuk mewakili warisan dalam pangkalan data:
Penyelesaian Optimum: Pewarisan Jadual Kelas dan Penguatkuasaan Peringkat Aplikasi
Untuk senario Storage
, Van
dan Warehouse
, kaedah "Warisan Jadual Kelas" lebih diutamakan. Walau bagaimanapun, menguatkuasakan kedua-dua kehadiran dan eksklusiviti perhubungan entiti kanak-kanak memerlukan semakan peringkat aplikasi:
Storage
untuk setiap rekod Van
atau Warehouse
.Storage
dipautkan kepada hanya satu Van
ATAU satu Warehouse
rekod, jangan sekali-kali kedua-duanya.Walaupun kekangan utama asing boleh membantu, untuk mencapai eksklusiviti lengkap mungkin memerlukan prosedur tersimpan dan logik peringkat aplikasi untuk menghalang kemas kini jadual secara langsung, berpotensi bercanggah oleh pelanggan. Kekurangan kekangan tertunda Microsoft SQL Server merumitkan penyelesaian berasaskan kekangan semata-mata.
Alternatif: Menguatkuasakan Eksklusiviti tanpa Kekangan Tertunda
Kaedah alternatif mengelakkan kekangan tertunda dengan menambahkan lajur STORAGE_TYPE
:
STORAGE_TYPE
yang dikira ditetapkan kepada 0.STORAGE_TYPE
yang dikira ditetapkan kepada 1.Kekangan unik kemudiannya digunakan pada gabungan (STORAGE_ID
, STORAGE_TYPE
):
<code class="language-sql">CREATE TABLE VAN ( STORAGE_ID int PRIMARY KEY, STORAGE_TYPE AS CAST(0 as tinyint) PERSISTED, FOREIGN KEY (STORAGE_ID, STORAGE_TYPE) REFERENCES STORAGE(STORAGE_ID, STORAGE_TYPE) ); CREATE TABLE WAREHOUSE ( STORAGE_ID int PRIMARY KEY, STORAGE_TYPE AS CAST(1 as tinyint) PERSISTED, FOREIGN KEY (STORAGE_ID, STORAGE_TYPE) REFERENCES STORAGE(STORAGE_ID, STORAGE_TYPE) );</code>
Pendekatan ini menjamin bahawa satu STORAGE_ID
hanya boleh dikaitkan dengan sama ada Van
atau Warehouse
, dengan itu menguatkuasakan eksklusiviti hubungan satu dengan satu. Walau bagaimanapun, kehadiran masih memerlukan pengesahan peringkat aplikasi.
Atas ialah kandungan terperinci Bagaimana untuk Mewujudkan dan Menguatkuasakan Perhubungan Satu-dengan-Satu dengan Berkesan dalam Reka Bentuk Pangkalan Data dengan Warisan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!