Rumah >pangkalan data >tutorial mysql >Bagaimanakah Kekangan EXCLUDE PostgreSQL Dapat Menghalang Pertindihan dan Julat Tarikh/Masa Bersebelahan?
Apabila mencipta pangkalan data yang menyimpan julat tarikh/masa sewenang-wenangnya, adalah penting untuk menguatkuasakan kekangan yang menghalang entri bertindih atau bersebelahan. Kekangan ini adalah penting untuk mengekalkan integriti dan ketepatan data.
Dalam PostgreSQL, kekangan EXCLUDE memenuhi tujuan ini dengan menggunakan indeks GiST. Walau bagaimanapun, kebimbangan umum timbul mengenai andaian resolusi satu saat apabila mentakrifkan kekangan ini. Jenis data cap waktu dalam PostgreSQL selalunya mempunyai peleraian yang lebih tinggi, yang berpotensi membawa kepada ketidaktepatan.
Penyelesaian Menggunakan Sempadan Eksklusif
Untuk menangani isu ini dan mengelakkan kedua-dua julat bertindih dan bersebelahan, ia adalah disyorkan untuk menguatkuasakan had eksklusif ('[)') pada julat tarikh/masa. Ini melibatkan memasukkan sempadan bawah (menggunakan 'lower_inc()') dan mengecualikan sempadan atas ('NOT upper_inc()') melalui kekangan CHECK. Selain itu, untuk mengecualikan julat bersebelahan, satu lagi kekangan EXCLUDE menggunakan operator '-|-' boleh digunakan.
Kod Contoh:
CREATE TABLE tbl ( tbl_id serial PRIMARY KEY , tsr tsrange , CONSTRAINT tsr_no_overlap EXCLUDE USING gist (tsr WITH &&) , CONSTRAINT tsr_no_adjacent EXCLUDE USING gist (tsr WITH -|-) , CONSTRAINT tsr_enforce_bounds CHECK (lower_inc(tsr) AND NOT upper_inc(tsr)) );
Penyelesaian ini memastikan bahawa hanya julat dengan sempadan eksklusif dibenarkan, dengan berkesan menghalang kedua-dua entri bertindih dan bersebelahan. Ia juga memastikan integriti data dengan menguatkuasakan gelagat julat yang diingini.
Atas ialah kandungan terperinci Bagaimanakah Kekangan EXCLUDE PostgreSQL Dapat Menghalang Pertindihan dan Julat Tarikh/Masa Bersebelahan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!