اسید (پایگاه داده)

**ACID** در پایگاه داده‌ها یک مجموعه ویژگی است که تضمین‌کنندهٔ صحت و یکپارچگی تراکنش‌ها در سیستم‌های مدیریت پایگاه داده است. این ویژگی‌ها شامل موارد زیر است:

* **تجزیه‌ناپذیری (Atomicity):** تضمین می‌کند که یک تراکنش یا به‌طور کامل انجام می‌شود یا اصلاً انجام نمی‌شود. به عبارت دیگر، هیچ حالت ناقص یا نیمه‌تمامی برای تراکنش وجود ندارد.
* **هم‌خوانی (Consistency):** اطمینان می‌دهد که پایگاه داده پس از انجام هر تراکنش در یک حالت معتبر باقی می‌ماند و قوانین یکپارچگی داده‌ها رعایت می‌شود.
* **انزوا (Isolation):** تضمین می‌کند که تراکنش‌های موازی با یکدیگر تداخلی نداشته باشند و به‌گونه‌ای اجرا شوند که انگار به‌صورت سریالی (یکی پس از دیگری) انجام شده‌اند.
* **پایایی (Durability):** اطمینان می‌دهد که پس از اتمام یک تراکنش و ثبت تغییرات، این تغییرات حتی در صورت بروز خرابی سیستم (مانند قطع برق) نیز محفوظ می‌مانند.

این مفهوم نخستین بار توسط **جیم گری** در دههٔ ۱۹۷۰ میلادی معرفی شد و به‌عنوان اصول اساسی برای مدیریت تراکنش‌های قابل اعتماد در پایگاه داده شناخته می‌شود. هدف از ویژگی‌های ACID، اطمینان از این است که داده‌ها همواره صحیح، قابل اطمینان و در برابر خطاها مقاوم باشند، حتی در صورت وقوع مشکلاتی مانند خرابی سخت‌افزار، مشکلات نرم‌افزاری، یا خطای انسانی.

## ویژگی‌ها

### 1. تجزیه‌ناپذیری (Atomicity)
ویژگی تجزیه‌ناپذیری تضمین می‌کند که هر تراکنش به‌طور کامل انجام می‌شود یا اصلاً انجام نمی‌شود. به عبارت دیگر، یک تراکنش به هیچ‌وجه نمی‌تواند در وضعیت ناقص قرار گیرد. اگر یک تراکنش از چند مرحله تشکیل شده باشد، اگر حتی یکی از مراحل به خطا برخورد کند، تمام تراکنش باید به حالت اولیه بازگردانده شود. این مفهوم معمولاً تحت عنوان rollback شناخته می‌شود.

*مثال:* اگر دو مرحله ابتدایی تراکنش جابه‌جایی پول به درستی انجام شوند، ولی در مرحله سوم خطایی رخ دهد، سیستم به‌طور خودکار تمام تغییرات قبلی را لغو می‌کند.

### 2. هم‌خوانی (Consistency)
ویژگی هم‌خوانی تضمین می‌کند که پایگاه داده همواره از یک وضعیت معتبر به وضعیت معتبر دیگری منتقل شود. پس از انجام هر تراکنش، داده‌های پایگاه داده باید به‌گونه‌ای باقی بمانند که تمامی محدودیت‌ها، روابط و قواعد تعریف‌شده در سیستم رعایت شوند.

*مثال:* اگر پایگاه داده دارای محدودیت‌هایی مثل کلیدهای اصلی، کلیدهای خارجی یا [پایگاه‌داده‌های رابطه‌ای#محدودیت‌ها|محدودیت‌ها] باشد، تراکنش باید این محدودیت‌ها را رعایت کند تا پایگاه داده از یک وضعیت معتبر به وضعیت معتبر دیگری منتقل شود.

### 3. انزوا (Isolation)
ویژگی انزوا تضمین می‌کند که تراکنش‌ها به‌گونه‌ای اجرا شوند که تداخلی با یکدیگر نداشته باشند. این بدان معنی است که حتی اگر چندین تراکنش همزمان در حال اجرا باشند، نتایج هر یک از آن‌ها باید به‌طور مستقل از یکدیگر قابل مشاهده و معتبر باشد.

*مثال:* اگر دو تراکنش همزمان در حال انجام باشند، یکی از تراکنش‌ها نباید بر روی داده‌های دیگری تأثیر بگذارد تا زمانی که تراکنش اول به پایان برسد.

### 4. پایایی (Durability)
ویژگی پایایی تضمین می‌کند که تغییرات حاصل از تراکنش‌ها پس از تایید (commit) دائمی خواهند بود. این ویژگی اطمینان می‌دهد که حتی در صورت بروز خطا یا سقوط سیستم، داده‌ها و تغییرات انجام شده در تراکنش‌ها حفظ خواهند شد و از بین نخواهند رفت.

*مثال:* زمانی که تراکنش با موفقیت تایید می‌شود، تغییرات داده‌ها باید در حافظه دائمی ذخیره شوند تا حتی در صورت خاموش شدن سیستم، از دست نروند.

## تاریخچه
ویژگی‌های ACID اولین بار در اوایل دهه 1970 توسط جیم گری در زمینهٔ سیستم‌های مدیریت پایگاه داده معرفی شدند. این اصول برای مدیریت تراکنش‌های پایگاه داده و حفظ یکپارچگی داده‌ها طراحی شدند و به سرعت در سیستم‌های پایگاه داده مدرن به استاندارد تبدیل شدند.

در ابتدا، این اصول برای پایگاه‌های داده‌ای طراحی شدند که تراکنش‌های چندگانه را به‌طور همزمان مدیریت می‌کنند و از بروز مشکلاتی مانند از دست رفتن داده‌ها، خواندن اطلاعات نادرست یا تداخل تراکنش‌ها جلوگیری می‌کنند.

## اهمیت ACID در پایگاه‌های داده
ویژگی‌های ACID برای تضمین یکپارچگی داده‌ها و جلوگیری از بروز مشکلات جدی در پردازش تراکنش‌ها اهمیت زیادی دارند. در سیستم‌های بزرگ و پیچیده که تراکنش‌ها و عملیات متعدد همزمان در حال انجام هستند، بدون رعایت این اصول، امکان بروز خطاهای جدی مانند دستکاری داده‌ها، از دست رفتن اطلاعات، یا تداخل میان تراکنش‌ها وجود دارد. با رعایت اصول ACID، سیستم‌های پایگاه داده قادر خواهند بود به‌طور خودکار از این مشکلات جلوگیری کنند و از دقت و صحت اطلاعات اطمینان حاصل نمایند.

## منابع

رده:پردازش تراکنش
رده:سامانه‌های مدیریت پایگاه داده‌ها
رده:کنترل همروندی