PostgreSQL ატარებს მონაცემთა მთლიანობას შეზღუდვების საშუალებით — წესები ცხრილის მონაცემებზე. სტანდარტული შეზღუდვების გარდა (, , , , , ), Postgres დამატებული მძლავრი ვარიანტებს მოაწვდის, როგორიცაა შეზღუდვები და მოქნილი გამოთქმები.
PostgreSQL ატარებს მონაცემთა მთლიანობას შეზღუდვების საშუალებით — წესები ცხრილის მონაცემებზე. სტანდარტული შეზღუდვების გარდა (, , , , , ), Postgres დამატებული მძლავრი ვარიანტებს მოაწვდის, როგორიცაა შეზღუდვები და მოქნილი გამოთქმები.
PRIMARY KEYFOREIGN KEYUNIQUENOT NULLCHECKDEFAULTCHECKCREATE TABLE bookings (
id SERIAL PRIMARY KEY, -- unique identifier
room_id INT NOT NULL REFERENCES rooms(id), -- foreign key (referential integrity)
email VARCHAR(255) UNIQUE NOT NULL, -- unique + required
guests INT CHECK (guests > 0 AND guests <= 10), -- value constraint
status TEXT DEFAULT 'pending' -- default value
);
PRIMARY KEY → unique row identifier
FOREIGN KEY → references another table (referential integrity, with ON DELETE options)
UNIQUE → no duplicate values
NOT NULL → must have a value
CHECK → value must satisfy a condition
DEFAULT → default value when not provided
CHECK (price > 0)
CHECK (end_date > start_date) -- logical consistency between columns
CHECK (status IN ('active', 'inactive', 'pending'))
CHECK (email ~ '^[^@]+@[^@]+\.[^@]+$') -- regex validation
Postgres-ის CHECK შეზღუდვები შეუძლიათ დაზღვან მდიდრული ბიზნეს წესები, შედეგად სვეტებს შორის პირობებით და regex ნიმუშებით.
-- prevent OVERLAPPING bookings for the same room (impossible with UNIQUE alone!)
CREATE TABLE bookings (
room_id INT,
during TSRANGE, -- a time range
EXCLUDE USING GIST (room_id WITH =, during WITH &&) -- no two rows where room_id is
); -- equal AND time ranges OVERLAP
EXCLUDE შეზღუდვები (PostgreSQL-ის სპეციფიკური ფუნქცია) კრძალავს მწკრივებს, რომლებიც კონფლიქტში მოდის მომხმარებლის ოპერატორის მიხედვით — ცნობილია, რომ გამორიცხავს დაკვეთილი დროის დიაპაზონებს (ორმაგი დაჯავშნება), რომელიც UNIQUE შეზღუდვა არ შეუძლია დაზღვან.
-- check constraints at COMMIT instead of immediately (useful for circular references)
FOREIGN KEY (...) REFERENCES ... DEFERRABLE INITIALLY DEFERRED
შეზღუდვები აუცილებელია მონაცემთა მთლიანობისთვის — ისინი აკონტროლებენ მონაცემთა წესებს მონაცემთა ბაზის დონეზე (ბოლო თავდამცველი, ყოველთვის გაკონტროლებული აპლიკაციის კოდის მიუხედავად), ამიტომ PostgreSQL-ის შეზღუდვების მხარდაჭერის გაგება მნიშვნელოვანია მძლავრი მონაცემთა ბაზების დიზაინისთვის.
სტანდარტული შეზღუდვების ცოდნა (PRIMARY KEY, FOREIGN KEY რეფერენციული უთანასწორობით, UNIQUE, NOT NULL, CHECK, DEFAULT) და ის, რა აკონტროლებს თითოეული, ფუნდამენტალური არის სქემის დიზაინისთვის, რომელიც მოამზადებს მონაცემთა ბაზის დონის გარანტიებს (უნიკალურობა, სამართლიანი ცნობები, საჭირო მნიშვნელობები, სამართლიანი მონაცემები), რომლებიც იცავენ ხარვეზებისგან, რასის პირობებისგან და არათანმიმდევრული მონაცემებისგან ისე, რომ მხოლოდ აპლიკაციის კოდი არ შეუძლია.
PostgreSQL-ის CHECK შეზღუდვები განსაკუთრებით ღირებულია, რომლებიც აკონტროლებენ მდიდრულ ბიზნეს წესებს, შედეგად სვეტებს შორის პირობებით (ლოგიკური თანმიმდევრობა, როგორიცაა end_date > start_date) და თუნდაც regex ნიმუშებით — რაც საშუალებას გაძლევთ დაშიფროთ დომენის წესები პირდაპირ სქემაში.
საკუთრებით ღირებულია PostgreSQL-ის სპეციფიკური EXCLUDE შეზღუდვა, რომელიც კრძალავს კონფლიქტური მწკრივებს მომხმარებლის ოპერატორების მიხედვით — ყველაზე მნიშვნელოვანი დაკვეთილი დროის დიაპაზონების (ორმაგი დაჯავშნება ოთახისთვის/რესურსისთვის) გამორიცხვა, ძლევრი ունარი, რომელიც სტანდარტული UNIQUE შეზღუდვა არ შეუძლია მოამზადოს და რომელიც ელეგანტურად ხსნის საერთო რეალური სამყაროს პრობლემას (განრიგი, რეზერვაციები) მონაცემთა ბაზის დონეზე.
შეზღუდვების გაგება — სტანდარტული მთლიანობისთვის, Postgres-ის მოქნილი CHECK გამოთქმები და EXCLUDE კონფლიქტების აღკვეთისთვის — მნიშვნელოვანია მონაცემთა ბაზების დიზაინისთვის, რომლებიც ავტომატურად აკონტროლებენ სისწორეს.
მონაცემთა მთლიანობა კრიტიკულია და შეზღუდვები გამოაქ აპლიკაციის კოდი არ შეუძლია, და რადგან Postgres მძლავრი ვარიანტებს მოამზადებს (მდიდრული CHECK, EXCLUDE დაკვეთილი დიაპაზონებისთვის) ბაზის მიღმა, PostgreSQL-ის შეზღუდვების მხარდაჭერის გაგება ღირებული, პრაქტიკულად რელევანტური ცოდნა მძლავრი მონაცემთა ბაზების აგებისთვის, EXCLUDE შეზღუდვა განსაკუთრებით ყოფილი განმასხვავებელი, სასარგებლო PostgreSQL უნარი დღეს ცნობისთვის განრიგი/რეზერვაციის სისტემებისთვის.