برقراری رابطه میان جداول در sqlite

در این آموزش قصد داریم تا به طور ساده برقراری رابطه میان جداول را در دیتابیس sqlite آموزش دهیم. در تمامی بانک های اطلاعاتی برقراری رابطه میان دو یا چند جدول از طریق کلید های اصلی(PRIMARY KEY) و کلیدهای خارجی(FOREIGN KEY) صورت می گیرد. به عنوان مثال فرض کنید در حال طراحی جداول یک سیستم بانکی هستیم؛ برای حساب ها یک جدول به نام Accounts و برای تراکنش ها یک جدول به نام Transaction در نظر گرفته ایم. می خواهیم اطمینان حاصل کنیم که هر تراکنشی که به جدول Transaction اضافه می شود، حتما به یک حساب بانکی که در جدول Accounts ثبت شده، مرتبط است. همچنین می خواهیم مطمئن شویم هر حسابی که در جدول Accounts حذف می شود، تمامی تراکنش های آن حساب از جدول Transaction حذف شده اند. به بیان ساده تر می خواهیم میان هر حساب و تراکنش های آن حساب ارتباط برقرار کنیم. برای ایجاد این ارتباط ابتدا باید با مفاهیم مهمی به نام های کلید اصلی(PRIMARY KEY) و کلید خارجی(FOREIGN KEY) آشنا شویم.

کلید اصلی(PRIMARY KEY)

فیلدی که خصوصیت کلید اصلی پیدا کند، باید محتوای یکتا(UNIQUE) و غیرتهی(NOT NULL) داشته باشد. در هر جدول معمولا یک فیلد چنین خصوصیتی پیدا می کند. برای ساخت جدول حساب ها از این خصوصیت استفاده میکنیم و این خصوصیت را به فیلد “شماره حساب” که برای هر حساب مقداری متفاوت و غیرتکراری است، اختصاص می دهیم. به نمونه کد زیر دقت کنید:

CREATE TABLE Accounts (
account_id TEXT NOT NULL,
card_name TEXT NOT NULL,
card_number TEXT,
card_cash INTEGER,
PRIMARY KEY (account_id)
);

کلید خارجی(FOREIGN KEY)

فیلدی که خصوصیت کلید خارجی پیدا کند، باید محتوایی برابر با یکی از مقادیرِ کلید اصلیِ موجود در جدول مرجع(REFERENCE) داشته باشد. در غیر اینصورت عملیات درج(INSERT) و ویرایش(UPDATE) با خطا روبرو خواهند شد(انجام نمی شوند). برای ساخت جدول تراکنش ها از این خصوصیت استفاده می کنیم و این خصوصیت را به فیلد “شماره حساب تراکنش” اختصاص می دهیم. با اینکار هر تراکنشی که ثبت می شود، باید مربوط به یک حساب باشد که در جدول حساب ها ثبت شده است. به نمونه کد زیر دقت کنید:


CREATE TABLE Transaction (

Transaction_account_id TEXT NOT NULL,

transaction_value INT,

transaction_date DATETIME,

FOREIGN KEY (transaction_account_id) REFERENCES Accounts(account_id)

);

توجه داشته باشید که برای اعمال مطالب این آموزش در دیتابیس sqlite، ابتدا باید محدودیت کلید خارجی را فعال کنید! برای انجام این کار بعد از اتصال به پایگاه داده، Query زیر را اجرا کنید:

 PRAGMA foreign_keys = ON; 

چنانچه اجرای این Query با خطا روبرو نشود، می توانید میان جداول ارتباط برقرار کنید. در صورت بروز خطا احتما نسخه sqlite مورد استفاده شما قدیمی تر از ۳٫۶٫۱۹ است.

فیلد Nullable در Sqlite

نکته دیگر این است که بنا به نیاز می‌توانیم فیلدی که کلید خارجی است را nullable یا همان تهی پذیر کنیم. در مثال این آموزش و در چنین شرایطی، امکان درج تراکنشی که حساب نداشته باشد فراهم می‌شود. برای اینکه فیلدی تهی پذیر شود نیازی نیست که در SQL مربوط به ساخت جدول چیزی اضافه کنیم. زیرا به صورت پیشفرض تمام فیلدهای قابل تعریف در دیتابیس Sqlite تهی پذیر هستند. مگر اینکه با اضافه کردن عبارت NOT NULL به یک فیلد، قابلیت تهی پذیری را از بین ببریم. به مثال زیر توجه کنید:


CREATE TABLE Transaction (
Transaction_account_id TEXT,
transaction_value INT, transaction_date DATETIME,
FOREIGN KEY (transaction_account_id) REFERENCES Accounts(account_id)
);

همانطور که عنوان شد، با حذف عبارت NOT NULL از یک فیلد، امکان درج مقدار تهی در آن فراهم خواهد شد.

موفق و پیروز باشید

2 دیدگاه دربارهٔ «برقراری رابطه میان جداول در sqlite;

  1. با سلام
    اگه امکان داره قطعه کد مربوط به اندرویدشم بنویسید تا بتونیم در برنامه استفاده کنیم
    البته با تک جدولی میتونم کار کنم ولی با دو جدولی …..
    اگه امکانش بود برام ایمیل کنید
    با تشکر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *