شرح صفوف ومحتوى الفقرة
تربط المفاتيح الأجنبية (FOREIGN KEY) السجلات الفرعية مثل الطلبات بسجل الأب في جدول المستخدمين، وتتطلب محرك التخزين InnoDB في MySQL.
- يجب أن يطابق عمود المفتاح الأجنبي (
user_id) نوع وإشارة المفتاح الأساسي الأب تماماً (مثلBIGINT UNSIGNEDفي كليهما). - استخدم
ON DELETE CASCADEلحذف السجلات الفرعية تلقائياً مع الأب، أوON DELETE RESTRICTلمنع حذف أب يمتلك سجلات مرتبطة. - ألحق دائماً
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ciبنهاية جملCREATE TABLEفي MySQL.
تعريف المفتاح الأجنبي FOREIGN KEY (dept_id) REFERENCES depts(id) يمنع وجود موظفين مرتبطين بقسم غير موجود ويحفظ التكامل المرجعي.
PHP
<?php
$pdo = new PDO('sqlite::memory:');
$pdo->exec('PRAGMA foreign_keys = ON');
$pdo->exec('CREATE TABLE depts (id INTEGER PRIMARY KEY, name TEXT)');
$pdo->exec('CREATE TABLE staff (
id INTEGER PRIMARY KEY,
dept_id INTEGER NOT NULL,
FOREIGN KEY (dept_id) REFERENCES depts(id) ON DELETE CASCADE
)');
echo "Foreign key constraint active\n";