הנתונים שלך טובים רק אם אתה יכול לסמוך עליהם. השתמש באילוצי מסד נתונים כדי להבטיח שהוא מדויק, אמין ואינו שובר את מודל הנתונים שלך.

טייק אווי מפתח

  • השתמש באילוצי SQL כדי לשמור על שלמות הנתונים ולהבטיח אחידות במסד הנתונים שלך. האילוץ NOT NULL מאלץ עמודות לדחות ערכי NULL.
  • הטמע אילוצי מפתח ראשי כדי להבטיח ייחודיות של ערכים בעמודה או בקבוצת עמודות. זה מונע רשומות כפולות בטבלת מסד נתונים.
  • אילוצי מפתח זרים יוצרים קשרים בין טבלאות ומונעים פעולות שיהרסו את הקישורים ביניהן. הם מבטיחים שרשומה בטבלת הצאצא מפנה לטבלת האב.

מסד נתונים חיוני עבור יישומים רבים, אך הוא עלול להיות מבולגן אם אין לך הנחיות לאחסון ועיבוד נתונים.

אילוצי SQL מציינים כללים לאחסון נתונים בטבלה. כאשר אתה מגדיר אילוצים, מסד הנתונים יזרוק שגיאה אם ​​תנסה לאחסן נתונים המפרים את הכללים הללו. אילוצים עוזרים לשמור על שלמות הנתונים ולהבטיח אחידות במסד הנתונים שלך.

ישנם מספר סוגים של אילוצי SQL שבהם אתה יכול להשתמש; הנה כמה מהשימושיים ביותר.

1. אילוץ לא NULL

עמודות מסד נתונים, כברירת מחדל, מקבלים נתונים עם ערכי NULL. NULL בעצם אומר שלא קיים ערך. האילוץ NOT NULL מאלץ עמודה לדחות ערכי NULL.

instagram viewer

אילוץ זה מבטיח שכל עמודה חייבת להכיל ערך. לא ניתן להוסיף רשומה למסד הנתונים מבלי לספק נתונים עבור עמודות כלשהן עם האילוץ NOT NULL.

קח את הדוגמה של א לקוחות שולחן. יש כמה פרטים הכרחיים על כל לקוח שאתה רוצה לתיעוד, כמו שמו. הוסף את האילוץ NOT NULL לשדות החובה כדי להבטיח שהלקוחות יספקו מידע זה.

הנה דוגמה שמראה כיצד אתה יכול להשתמש באילוץ NOT NULL ב-a מסד נתונים PostgreSQL:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Mobile_No int NOT NULL,
Age int
);

אם תנסה להכניס רשומת לקוח ללא ה גיל שדה, מסד הנתונים יקבל אותו ללא שגיאות:

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 0723000000);

עם זאת, אם תנסה להכניס רשומה ללא ה שם פרטי שדה, מסד הנתונים ידחה אותו עם הודעת שגיאה:

ERROR: null value in column "firstname" violates not-null constraint
Detail: Failing row contains (123456, Dior, null, 723000000, null).

2. אילוץ מפתח ראשי

KEY הוא תכונה ייחודית המוגדרת לעמודה או לשדה המזהה את הטבלה (או הרשומה) של טבלה במערכות מסד נתונים. אילוץ PRIMARY KEY מבטיח את הייחודיות של ערכים בעמודה או בקבוצת עמודות. הוא פועל כמזהה ייחודי בשורה, ומונע רשומות כפולות בטבלת מסד נתונים.

מפתחות ראשיים מכילים ערכים ייחודיים ואינם יכולים להכיל ערכי NULL. כל אחד טבלת מסד נתונים של SQL חייב להיות מפתח ראשי אחד בלבד. ה-PRIMARY KEY יכול להיות בעל עמודות בודדות או מרובות.

לדוגמה, אתה יוצר מסד נתונים של רשומות לקוחות. אתה צריך שכל לקוח יזין את מספרי הזיהוי שלו בצורה שונה מכל אחד אחר. אתה יכול להחיל את אילוץ המפתח הראשי כדי להבטיח שלאף אחד מהלקוחות שלך לא יהיה אותו מספר תעודת זהות.

הקוד הבא מראה כיצד ניתן להציג אילוץ מפתח ראשי במסד נתונים של MySQL:

CREATETABLE Customers (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
PRIMARY KEY (ID)
);

מסד הנתונים לא יקבל ערך זה אם משתמש יזין רשומה אחרת עם מזהה דומה. במקום זאת, הוא יזרוק שגיאה המציינת כפילות. המשתמש מנסה להכניס שתי רשומות עם אותו מזהה בדוגמה הבאה:

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'John', 'Doe', 35 );

INSERTINTO Customers (ID, LastName, FirstName, Age)
VALUES (1, 'Mary', 'Jane', 35 );

מסד הנתונים יציג הודעת שגיאה:

Duplicate entry '1' for key 'PRIMARY'

אבל אם תשנה את המזהה של הלקוח השני, בסיס הנתונים יקבל את הערך. לכן, המפתח הראשי מבטיח שאין זיהויים כפולים ברשומות הלקוחות שלך.

3. אילוץ מפתח זר

מפתחות זרים ליצור קשרים בין שני טבלאות. ניתן להוסיף מפתח זר לשדה/עמודה בטבלה אחת המפנה למפתח הראשי בטבלה אחרת.

הטבלה עם המפתח הראשי היא טבלת האב, ואילו הטבלה עם המפתח הזר היא טבלת הילד. אז לא תוכל להתקיים רשומה בטבלת הילד ללא הפניה לטבלת האב.

אילוץ המפתח הזר מונע פעולות שיהרסו קישורים בין טבלאות. לדוגמה, אתה לא יכול יְרִידָה טבלה אחת אם היא מקשרת לאחרת עם מפתח זר. תצטרך להוריד את שני הטבלאות בבת אחת.

שלא כמו מפתח ראשי, אתה יכול לשכפל מפתח זר ולהכיל יותר ממפתח אחד בטבלה אחת. ערכי מפתח זר יכולים להיות גם ריק. בדוגמה הבאה, עליך להשתמש ב- מספר לקוח כדי ליצור הזמנה.

CREATETABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);

CREATETABLE Orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

INSERTINTO Customers(customer_id, first_name, last_name)
VALUES (1, 'Christian', 'Dior');

INSERTINTO Orders(order_id, customer_id, order_date)
VALUES (1, 1, '2023-08-07');

אם תנסה ליצור הזמנה ללא קיים מספר לקוח, מסד הנתונים מציג הודעת שגיאה:

Cannot add or update a child row: a foreign key constraint fails
(`db_9_4ee205c`.`orders`, CONSTRAINT `orders_ibfk_1` FOREIGN KEY
(`customer_id`) REFERENCES `customers` (`customer_id`))

4. אילוץ ייחודי

אילוץ זה מבטיח ששתי שורות לא יכולות לקבל את אותם ערכים עבור עמודה ספציפית. כמו מפתחות ראשיים, אילוץ ייחודי שומר על שלמות הנתונים ומונע ערכים כפולים. אם אתה עובד עם מסד נתונים מעוצב בצורה גרועה ללא האילוץ UNIQUE, ייתכן שתצטרך בסופו של דבר למצוא ולמחוק את הכפילויות.

בניגוד למפתחות ראשיים, אתה יכול לקבל אילוצים ייחודיים רבים בטבלה אחת. לדוגמה, בעת יצירת א לקוחות טבלה, ייתכן שתרצה לקבל מזהים ומספרי טלפון ייחודיים. כדי להוסיף אילוץ כזה באמצעות שרת MySQL, השתמש בתחביר זה:

CREATETABLE Customers (
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

אם תכניס למסד הנתונים רשומות עם אותו מספר נייד, הוא יציג הודעת שגיאה.

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (123456, 'Dior', 'Christian', 254000000 );

INSERTINTO Customers (ID, LastName, FirstName, Mobile_No)
VALUES (7891011, 'Dedan', 'Kimathi', 254000000 );

הודעת השגיאה תהיה בערך כך:

Duplicate entry '254000000' for key 'Mobile_No'

אילוץ ייחודי זה מבטיח שלבסיס הנתונים לא יהיו לקוחות עם אותם מזהים או מספרים ניידים.

5. בדוק אילוץ

האילוץ CHECK מגביל את טווח הערכים שמוכנס בעמודה. הוספת אילוץ CHECK על עמודה תאפשר רק ערכים שצוינו עבור אותה עמודה. זה אוכף את שלמות הנתונים על ידי הבטחת המשתמש רק מכניס נתונים חוקיים לטבלה.

אילוץ CHECK חייב להעריך ערך כ-TRUE או לא ידוע עבור כל שורה או טבלה שצוינה. אם הערך הוא FALSE, מסד הנתונים מציג הודעת שגיאה.

לדוגמה, בטבלת הלקוחות, ייתכן שתרצה לשרת רק לקוחות מעל 18 שנים. אתה יכול להוסיף אילוץ CHECK כדי להבטיח שאתה לא משרת לקוחות קטינים. אתה יכול להוסיף את האילוץ במסד נתונים PostgreSQL, כפי שמוצג בקוד הבא:

CREATETABLE Customers (
ID int NOT NULL,
Age int CHECK(Age>=18),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Mobile_No BIGINT UNIQUE
);

עכשיו אם תנסה להזין גיל של לקוח מתחת לגיל 18:

INSERTINTO Customers (ID, Age, LastName, FirstName, Mobile_No)
VALUES (123456, 15, 'Dior', 'Christian', 1254000000 );

מסד הנתונים יציג הודעת שגיאה כזו:

ERROR: new row for relation "customers" violates check constraint
"customers_age_check"
Detail: Failing row contains (123456, 15, Dior, Christian, 1254000000)

כיצד להוסיף ולהסיר אילוצי SQL ממאגרי מידע

אילוצי SQL אינם יצוקים באבן. ניתן להוסיף או להסיר אילוצים על טבלאות קיימות באמצעות המשפט ALTER TABLE. הצהרת ALTER מאפשרת לך לעבוד עם אילוצים שיתאימו לצרכי הנתונים שלך.

ישנם עוד אילוצי SQL שאתה יכול ללמוד כדי לעצב מסד נתונים לפי טעמך. אתה יכול להתחיל עם אלה המפורטים במאמר זה.