Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mewujudkan dan Menguatkuasakan Perhubungan Satu-dengan-Satu dengan Berkesan dalam Reka Bentuk Pangkalan Data dengan Warisan?

Bagaimana untuk Mewujudkan dan Menguatkuasakan Perhubungan Satu-dengan-Satu dengan Berkesan dalam Reka Bentuk Pangkalan Data dengan Warisan?

DDD
DDDasal
2025-01-13 17:46:42477semak imbas

How to Effectively Establish and Enforce One-to-One Relationships in Database Design with Inheritance?

Melaksana dan Menguatkuasakan Perhubungan Satu-dengan-Satu dalam Reka Bentuk Pangkalan Data Menggunakan 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:

  • Warisan Meja Tunggal: Semua entiti (ibu bapa dan anak) berada dalam satu jadual.
  • Warisan Meja Konkrit: Setiap entiti anak mempunyai jadual sendiri; tiada jadual induk wujud.
  • Warisan Jadual Kelas: Jadual berasingan dibuat untuk setiap entiti (ibu bapa dan anak).

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:

  • Kehadiran: Menjamin rekod Storage untuk setiap rekod Van atau Warehouse.
  • Eksklusif: Pastikan rekod 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:

  • Jadual Van: Lajur STORAGE_TYPE yang dikira ditetapkan kepada 0.
  • Jadual Gudang: Lajur 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn