PostgreSQL - ข้อ จำกัด
ข้อ จำกัด คือกฎที่บังคับใช้กับคอลัมน์ข้อมูลบนตาราง สิ่งเหล่านี้ใช้เพื่อป้องกันไม่ให้ป้อนข้อมูลที่ไม่ถูกต้องลงในฐานข้อมูล สิ่งนี้ทำให้มั่นใจได้ถึงความถูกต้องและความน่าเชื่อถือของข้อมูลในฐานข้อมูล
ข้อ จำกัด อาจเป็นระดับคอลัมน์หรือระดับตาราง ข้อ จำกัด ระดับคอลัมน์จะใช้กับคอลัมน์เดียวเท่านั้นในขณะที่ข้อ จำกัด ระดับตารางจะใช้กับทั้งตาราง การกำหนดชนิดข้อมูลสำหรับคอลัมน์เป็นข้อ จำกัด ในตัวเอง ตัวอย่างเช่นคอลัมน์ประเภท DATE จำกัด คอลัมน์เป็นวันที่ที่ถูกต้อง
ต่อไปนี้เป็นข้อ จำกัด ที่ใช้โดยทั่วไปที่มีอยู่ใน PostgreSQL
NOT NULL Constraint - ตรวจสอบให้แน่ใจว่าคอลัมน์ต้องไม่มีค่า NULL
UNIQUE Constraint - ตรวจสอบให้แน่ใจว่าค่าทั้งหมดในคอลัมน์แตกต่างกัน
PRIMARY Key - ระบุแต่ละแถว / ระเบียนในตารางฐานข้อมูลโดยไม่ซ้ำกัน
FOREIGN Key - จำกัด ข้อมูลตามคอลัมน์ในตารางอื่น ๆ
CHECK Constraint - ข้อ จำกัด CHECK ช่วยให้มั่นใจได้ว่าค่าทั้งหมดในคอลัมน์เป็นไปตามเงื่อนไขบางประการ
EXCLUSION Constraint - ข้อ จำกัด EXCLUDE ช่วยให้มั่นใจได้ว่าหากมีการเปรียบเทียบสองแถวในคอลัมน์หรือนิพจน์ที่ระบุโดยใช้ตัวดำเนินการที่ระบุการเปรียบเทียบเหล่านี้ทั้งหมดจะไม่คืนค่า TRUE
ไม่ใช่ข้อ จำกัด ที่เป็นโมฆะ
ตามค่าเริ่มต้นคอลัมน์สามารถเก็บค่า NULL ได้ หากคุณไม่ต้องการให้คอลัมน์มีค่า NULL คุณต้องกำหนดข้อ จำกัด ดังกล่าวในคอลัมน์นี้โดยระบุว่าตอนนี้ไม่อนุญาตให้มีค่า NULL สำหรับคอลัมน์นั้น ข้อ จำกัด NOT NULL จะเขียนเป็นข้อ จำกัด ของคอลัมน์เสมอ
NULL ไม่เหมือนกับไม่มีข้อมูล แต่แสดงถึงข้อมูลที่ไม่รู้จัก
ตัวอย่าง
ตัวอย่างเช่นคำสั่ง PostgreSQL ต่อไปนี้สร้างตารางใหม่ชื่อ COMPANY1 และเพิ่มห้าคอลัมน์ซึ่งสามคอลัมน์คือ ID และ NAME และ AGE ระบุว่าไม่ยอมรับค่า NULL -
CREATE TABLE COMPANY1(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
ข้อ จำกัด ที่ไม่ซ้ำใคร
UNIQUE Constraint ป้องกันไม่ให้สองระเบียนมีค่าเหมือนกันในคอลัมน์หนึ่ง ๆ ตัวอย่างเช่นในตาราง COMPANY คุณอาจต้องการป้องกันไม่ให้คนสองคนหรือมากกว่านั้นมีอายุเท่ากัน
ตัวอย่าง
ตัวอย่างเช่นคำสั่ง PostgreSQL ต่อไปนี้สร้างตารางใหม่ชื่อ COMPANY3 และเพิ่มห้าคอลัมน์ ที่นี่คอลัมน์ AGE ถูกตั้งค่าเป็น UNIQUE ดังนั้นคุณจึงไม่สามารถมีสองระเบียนที่มีอายุเท่ากันได้ -
CREATE TABLE COMPANY3(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL UNIQUE,
ADDRESS CHAR(50),
SALARY REAL DEFAULT 50000.00
);
ข้อ จำกัด ที่สำคัญหลัก
ข้อ จำกัด ของคีย์หลักจะระบุแต่ละระเบียนในตารางฐานข้อมูลโดยไม่ซ้ำกัน สามารถมีคอลัมน์ที่ไม่ซ้ำกันได้มากกว่า แต่มีคีย์หลักเพียงรายการเดียวในตาราง คีย์หลักมีความสำคัญเมื่อออกแบบตารางฐานข้อมูล คีย์หลักเป็นรหัสเฉพาะ
เราใช้เพื่ออ้างถึงแถวของตาราง คีย์หลักกลายเป็นคีย์ต่างประเทศในตารางอื่นเมื่อสร้างความสัมพันธ์ระหว่างตาราง เนื่องจาก 'การกำกับดูแลการเข้ารหัสเป็นเวลานาน' คีย์หลักอาจเป็น NULL ใน SQLite นี่ไม่ใช่กรณีของฐานข้อมูลอื่น
คีย์หลักคือฟิลด์ในตารางซึ่งระบุแต่ละแถว / ระเบียนในตารางฐานข้อมูลโดยไม่ซ้ำกัน คีย์หลักต้องมีค่าที่ไม่ซ้ำกัน คอลัมน์คีย์หลักต้องไม่มีค่า NULL
ตารางสามารถมีคีย์หลักได้เพียงคีย์เดียวซึ่งอาจประกอบด้วยฟิลด์เดียวหรือหลายฟิลด์ เมื่อใช้หลายช่องเป็นคีย์หลักจะเรียกว่า acomposite key.
หากตารางมีคีย์หลักที่กำหนดไว้ในฟิลด์ใด ๆ คุณจะไม่สามารถมีสองระเบียนที่มีค่าเดียวกันของฟิลด์นั้น
ตัวอย่าง
คุณได้เห็นตัวอย่างต่างๆด้านบนแล้วซึ่งเราได้สร้างตาราง COMAPNY4 โดยมี ID เป็นคีย์หลัก -
CREATE TABLE COMPANY4(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
ข้อ จำกัด สำคัญต่างประเทศ
ข้อ จำกัด ของคีย์ต่างประเทศระบุว่าค่าในคอลัมน์ (หรือกลุ่มของคอลัมน์) ต้องตรงกับค่าที่ปรากฏในบางแถวของตารางอื่น เรากล่าวว่าสิ่งนี้รักษาความสมบูรณ์ของการอ้างอิงระหว่างสองตารางที่เกี่ยวข้อง พวกเขาเรียกว่าคีย์ต่างประเทศเนื่องจากข้อ จำกัด เป็นสิ่งแปลกปลอม นั่นคือนอกตาราง คีย์ต่างประเทศบางครั้งเรียกว่าคีย์อ้างอิง
ตัวอย่าง
ตัวอย่างเช่นคำสั่ง PostgreSQL ต่อไปนี้สร้างตารางใหม่ชื่อ COMPANY5 และเพิ่มห้าคอลัมน์
CREATE TABLE COMPANY6(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
ตัวอย่างเช่นคำสั่ง PostgreSQL ต่อไปนี้จะสร้างตารางใหม่ชื่อ DEPARTMENT1 ซึ่งจะเพิ่มสามคอลัมน์ คอลัมน์ EMP_ID เป็นคีย์นอกและอ้างอิงฟิลด์ ID ของตาราง COMPANY6
CREATE TABLE DEPARTMENT1(
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT references COMPANY6(ID)
);
ตรวจสอบข้อ จำกัด
CHECK Constraint ช่วยให้เงื่อนไขในการตรวจสอบค่าที่ป้อนลงในบันทึก หากเงื่อนไขประเมินว่าเป็นเท็จบันทึกจะละเมิดข้อ จำกัด และไม่ได้ป้อนลงในตาราง
ตัวอย่าง
ตัวอย่างเช่นคำสั่ง PostgreSQL ต่อไปนี้สร้างตารางใหม่ชื่อ COMPANY5 และเพิ่มห้าคอลัมน์ ในที่นี้เราเพิ่มคอลัมน์ CHECK with SALARY เพื่อไม่ให้คุณมี SALARY เป็นศูนย์
CREATE TABLE COMPANY5(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL CHECK(SALARY > 0)
);
ข้อ จำกัด การยกเว้น
ข้อ จำกัด การยกเว้นทำให้แน่ใจได้ว่าหากมีการเปรียบเทียบแถวสองแถวบนคอลัมน์หรือนิพจน์ที่ระบุโดยใช้ตัวดำเนินการที่ระบุการเปรียบเทียบตัวดำเนินการอย่างน้อยหนึ่งรายการจะส่งคืนค่าเท็จหรือค่าว่าง
ตัวอย่าง
ตัวอย่างเช่นคำสั่ง PostgreSQL ต่อไปนี้สร้างตารางใหม่ชื่อ COMPANY7 และเพิ่มห้าคอลัมน์ ที่นี่เราเพิ่มข้อ จำกัด EXCLUDE -
CREATE TABLE COMPANY7(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT,
AGE INT ,
ADDRESS CHAR(50),
SALARY REAL,
EXCLUDE USING gist
(NAME WITH =,
AGE WITH <>)
);
ในที่นี้การใช้ส่วนสำคัญคือประเภทของดัชนีในการสร้างและใช้สำหรับการบังคับใช้
คุณต้องดำเนินการคำสั่งCREATE EXTENSION btree_gistหนึ่งครั้งต่อฐานข้อมูล สิ่งนี้จะติดตั้งส่วนขยาย btree_gist ซึ่งกำหนดข้อ จำกัด การยกเว้นในประเภทข้อมูลสเกลาร์ธรรมดา
ในขณะที่เราบังคับใช้อายุจะต้องเท่ากันให้เราดูสิ่งนี้โดยการแทรกระเบียนลงในตาราง -
INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );
INSERT INTO COMPANY7 VALUES(3, 'Paul', 42, 'California', 20000.00 );
สำหรับคำสั่ง INSERT สองรายการแรกระเบียนจะถูกเพิ่มลงในตาราง COMPANY7 สำหรับคำสั่ง INSERT ที่สามข้อผิดพลาดต่อไปนี้จะปรากฏขึ้น -
ERROR: conflicting key value violates exclusion constraint "company7_name_age_excl"
DETAIL: Key (name, age)=(Paul, 42) conflicts with existing key (name, age)=(Paul, 32).
การลดข้อ จำกัด
ในการลบข้อ จำกัด คุณจำเป็นต้องทราบชื่อของมัน ถ้าขึ้นชื่อก็ปล่อยวางได้ง่ายๆ มิฉะนั้นคุณต้องหาชื่อที่ระบบสร้างขึ้น ชื่อตารางคำสั่ง psql มีประโยชน์ที่นี่ ไวยากรณ์ทั่วไปคือ -
ALTER TABLE table_name DROP CONSTRAINT some_name;