cari
Rumahpangkalan datatutorial mysqlBagaimana untuk Melaksanakan Kekangan Utama Asing yang Kompleks dalam SQLAlchemy untuk Memastikan Integriti Data?

How to Implement Complex Foreign Key Constraints in SQLAlchemy to Ensure Data Integrity?

Melaksanakan Kekangan Utama Asing Kompleks dalam SQLAlchemy

Latar Belakang

Perhubungan pangkalan data selalunya melibatkan senario kompleks yang memerlukan kekangan tambahan untuk memastikan integriti data. Artikel ini meneroka cabaran khusus: melaksanakan kekangan kunci asing yang memastikan kesahihan pilihan sambil mempertimbangkan potensi perhubungan bulat.

Cabaran

Pertimbangkan dua jadual: SystemVariables dan VariableOptions. SystemVariables mewakili pembolehubah sistem yang boleh disesuaikan, manakala VariableOptions mengandungi pilihan yang tersedia untuk pembolehubah ini. Setiap SystemVariable mempunyai pilihan pilihan yang diwakili oleh medan choice_id, manakala setiap VariableOption mempunyai variable_id yang menunjukkan pembolehubah miliknya.

Matlamatnya adalah untuk menambah kekangan tambahan yang memastikan:

VariableOptions[sysVar.choice_id].variable_id == sysVar.id

di mana sysVar ialah baris dalam jadual SystemVariables.

Penyelesaian tanpa Dirty Trik

Penyelesaian yang mudah ialah memanjangkan kunci asing yang merujuk kepada pilihan yang dipilih untuk memasukkan kedua-dua choice_id dan variable_id:

ALTER TABLE systemvariables
ADD CONSTRAINT systemvariables_choice_id_fk
FOREIGN KEY (choice_id, variable_id) REFERENCES variableoptions(option_id, variable_id);

Ini memastikan bahawa pilihan yang dipilih adalah sah dan merujuk kembali kepada yang betul berubah-ubah dalam kedua-dua arah.

Penyelesaian yang Lebih Baik: Kekangan Utama Asing Yang Ditunda

Sebelumnya pendekatan memerlukan semua lajur utama bukan NULL, yang boleh memperkenalkan sekatan apabila bekerja dengan sisipan baharu. Penyelesaian yang lebih baik ialah memanfaatkan kekangan utama asing yang boleh ditangguhkan.

CREATE TABLE systemvariables (
  variable_id int PRIMARY KEY
, variable    text
, choice_id   int NOT NULL
);

CREATE TABLE variableoptions (
  option_id   int PRIMARY KEY
, option      text
, variable_id int NOT NULL REFERENCES systemvariables
     ON UPDATE CASCADE ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED
, UNIQUE (option_id, variable_id) -- needed for the foreign key
);

ALTER TABLE systemvariables
ADD CONSTRAINT systemvariables_choice_id_fk FOREIGN KEY (choice_id, variable_id)
   REFERENCES variableoptions(option_id, variable_id) DEFERRABLE INITIALLY DEFERRED;

Pendekatan ini membolehkan pemasukan pembolehubah dan pilihan baharu dalam urus niaga yang sama, walaupun apabila ia bergantung antara satu sama lain, dengan menangguhkan semakan kunci asing sehingga penghujung urus niaga.

Kesimpulan

Dengan menggunakan kekangan kunci asing yang boleh ditangguhkan dan memanjangkan kunci asing untuk memasukkan berbilang lajur, seseorang boleh mencapai kekangan kunci asing yang kompleks yang mengekalkan integriti data sambil membenarkan fleksibiliti dalam manipulasi data.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Kekangan Utama Asing yang Kompleks dalam SQLAlchemy untuk Memastikan Integriti Data?. 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
Bagaimana saya menggugurkan atau mengubahsuai pandangan yang ada di mysql?Bagaimana saya menggugurkan atau mengubahsuai pandangan yang ada di mysql?May 16, 2025 am 12:11 AM

TODROPAVIEWInMYSQL, gunakan "dropviewififeXistsview_name;" andTomodifyAview, gunakan "createorreplaceviewview_nameasSelect ..."

Pandangan MySQL: Corak reka bentuk mana yang boleh saya gunakan dengannya?Pandangan MySQL: Corak reka bentuk mana yang boleh saya gunakan dengannya?May 16, 2025 am 12:10 AM

Mysqlviewscaneffectivetyutilizedesignpatternslikeadapter, penghias, kilang, andobserver.1) adapterpaternaptsdatafromdifferenttablesintoaunifiedview.2)

Apakah kelebihan menggunakan pandangan di MySQL?Apakah kelebihan menggunakan pandangan di MySQL?May 16, 2025 am 12:09 AM

ViewsinmysqlarebeneficialforsImplifingceMlexqueries, Enhancingsecurity, MemastikanDataconsistency, andoptimizingperformance

Bagaimana saya boleh membuat pandangan mudah di mysql?Bagaimana saya boleh membuat pandangan mudah di mysql?May 16, 2025 am 12:08 AM

TOCREATEASIMPLEVIEWInMYSQL, USETHECreatEviewStatement.1) definetheViewWithCreateViewView_nameas.2)

MySQL Buat Penyataan Pengguna: Contoh dan Kesalahan BiasaMySQL Buat Penyataan Pengguna: Contoh dan Kesalahan BiasaMay 16, 2025 am 12:04 AM

TOCReateUsersinMysql, UsethecreateUserStatement.1) Foralocaluser: createuser'localuser '@' localhost'identifiedby'SecureShword '; 2) foraremoteuser: createuser'remoteuser'@'%'

Apakah batasan menggunakan pandangan di MySQL?Apakah batasan menggunakan pandangan di MySQL?May 14, 2025 am 12:10 AM

Mysqlviewshavelimitations: 1) theDon'tsupportallsqloperations, bintikDatamanipulationThroughviewswithjoinsorsubqueries.2) merekacanimpactperformance, terutamanya dengan komplekssum

Faktor apa yang mempengaruhi bilangan pencetus yang boleh saya gunakan di MySQL?Faktor apa yang mempengaruhi bilangan pencetus yang boleh saya gunakan di MySQL?May 14, 2025 am 12:08 AM

Mysqldoes'timposeahardlimitontriggers, butpracticalfactorsDeterminetheirefectiveus

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
<🎜> obscur: Ekspedisi 33 - Cara mendapatkan pemangkin Chroma yang sempurna
2 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.

Versi Mac WebStorm

Versi Mac WebStorm

Alat pembangunan JavaScript yang berguna

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.