نگهداری تاریخچه تغییرات اطلاعات در یک دیتابیس

چند وقتی است درگیر پروژه ای شدم که ذخیره تغییرات برخی داده های اساسی سیستم از نیازهای اصلی آن است. به این صورت که اگر اطلاعات پایه دچار تغییرات شد، باید نسخه قبلی این اطلاعات در جایی ذخیره شود که بعداً برای گزارش گیری مورد استفاده قرار گیرد. به صورت معمول و در سیستم های معمولی رسم بر این است که اگر داده ای در یک جدول دیتابیس تغییر کرد دیگر تغییر کرده و اطلاعات قبلی آن قابل ردگیری نیست. ساده ترین راه حلی که به ذهن می رسد، گرفتن نسخه پشتیبان از دیتابیس به صورت دوره ای است. اما این روش برای این کار روش مناسبی نیست. ممکن است داده ها در طول یک دوره پشتیبان گیری بارها تغییر کنند، آن وقت تنها آخرین داده های تغییر داده شده را خواهیم داشت نه کل تغییرات را. به این اضافه کنید حجم زیادی که ممکن است فایل های Backup داشته باشند.

خوشبختانه این مشکلی نیست که برای اولین بار در جهان ما با آن برخورد کرده باشیم. در سطح اینترنت بحث های زیادی در این مورد وجود دارد و راه حل های مختلفی در مورد آن ارائه شده است. قبل از ما نرم افزارهای مختلفی مثل سورس کنترل ها و وب سایت معروف Wikipedia مکانیزم هایی برای ذخیره تغییرات داده های مهم خود پیاده سازی کرده اند. پس این نیاز، به هیچ وجه نیاز غیر معقولی نیست. کاربر نیاز دارد بداند در یک بازه زمانی خاص، موجودیت مورد نظرش چه مقداری داشته است و ما باید این امکان را برایش پیاده سازی کنیم.

یک روش طراحی دیتابیس به نام Point in Time Architecture وجود دارد که به صورت مخصوص برای حل چنین مشکلی بکار می رود. این روش طراحی تضمین می کند که همیشه تصویری از اطلاعات گذشته را در خود نگهداری کند تا هر گاه نیازی به اطلاعات گذشته بود، در اختیار ما قرار بدهد. در این روش طراحی هیچ گاه رکوردها به صورت فیزیکی آپدیت یا حذف نخواهند شد و فقط flagهایی برای علامت گذاری بر روی رکوردهای تغییر داده شده قرار می گیرد. در این روش، ساختار دیتابیس باید طوری طراحی شود که دیتابیس به ازای هر رکورد بتواند به سئوالات زیر پاسخ دهد :

  • رکورد چه موقع و توسط چه کسی Insert شد؟
  • رکورد چه موقع و توسط چه کسی Update شد؟
  • در یک تاریخ خاص اطلاعات رکورد چگونه بوده است؟

برای پاسخ به این سئوالات باید یکسری فیلد کنترلی داشته باشیم :

  • CreatedDate : تاریخ ساخته شدن رکورد برای اولین بار
  • ModifiedDate : تاریخی که اطلاعات رکورد تغییر داده می شوند
  • UserID : کاربری که اطلاعات را تغییر می دهد

tuple versioningبرای پیاده سازی چنین روشی می توان دو جور عمل کرد. روش اول این است که هر گاه کاربر خواست اطلاعات را تغییر دهد، به جای عمل Update ما یک عمل Insert انجام دهیم و اطلاعات قبلی را با یک فیلد کنترلی آرشیو شده محسوب کنیم. در این روش باید یک فیلد ModifiedDate داشت که هر زمان رکورد ویرایش شد مقداردهی شود. رکوردی که فیلد ModifiedDate آن برابر null باشد، رکورد جاری ما خواهد بود. این روش Tuple Versioning نام دارد که مکانیزمی برای ذخیره حالت فعلی یک رکورد به علاوه حالت های گذشته آن در یک جدول است. این روش برای زمانی که امکان تغییرات در رکوردهای جدول کم باشد بسیار مناسب است. در صورت زیاد بودن امکان تغییرات یک رکورد، باعث حجیم شدن جدول می شود و کارایی را پایین می آورد.

روش دوم ایجاد یک جدول History برای هر جدولی است که می خواهیم تغییرات داده های آن را پیگیری کنیم. به این صورت که برای هر جدول که نیاز به ذخیره تغییرات آن داریم یک جدول History می سازیم که هنگام تغییر هر یک از رکوردهای جدول اصلی، یک رکورد به جدول History متناظر آن اضافه می کنیم و یکسری اطلاعات اضافه مثل تاریخ تغییر و کاربر تغییر دهنده را همراه با آن ذخیره می کنیم.

History Tableهمانطور که در شکل بالا می بینید، برای نگهداری تاریخچه تغییرات قیمت یک محصول، یک Table جداگانه میسازیم و چند فیلد کنترلی به آن اضافه می کنیم. در اینجا فیلدهای ModifiedDate تاریخ تغییر قیمت محصول، SalesPrice قیمت محصول در زمان تغییر و UserID مشخص کننده کاربری است که قیمت محصول را تغییر داده است.

مزیت اینگونه طراحی دیتابیس در هنگان گزارش گیری مشخص می شود. با این طراحی، کاربر می تواند تمام تغییرات داده های مهم خود در طی زمان های مختلف را مشاهده کند.

راه های دسترسی به داده در دات نت فریم ورک!

در اکثر برنامه های کامپیوتری نیاز به ذخیره و بازیابی داده ها وجود دارد. داده هایی که بدون آن ها سیستم نرم افزاری ما معنایی ندارد. برنامه نویسان معمولاً راه های مختلفی برای این کار سراغ دارند. کسانی که با دات نت فریم ورک برنامه نویسی می کنند راه های مختلفی برای دسترسی به داده ها دارند. در این مطلب با تکنولوژی های مایکروسافت برای این کار آشنا خواهیم شد و سه ORM معروف دنیای دات نت را معرفی خواهیم کرد. مایکروسافت انتخاب های زیادی برای دسترسی به داده ها به برنامه نویسان دات نت می دهد که شما باید با بررسی آن ها و با توجه به نیازهای خودتان یکی از آن ها را انتخاب کنید.

ADO.NET

ADO.NET مجموعه ای از کامپوننت هاست که برنامه نویسان می توانند از آن ها برای برقراری ارتباط با دیتابیس های مختلف استفاده کنند. ADO.NET بخشی از کتابخانه کلاس های پایه دات نت فریم ورک است که توسط مایکروسافت توسعه داده می شود. برنامه نویسان به صورت گسترده از این تکنولوژی برای دسترسی و دستکاری داده های ذخیره شده در یک دیتابیس رابطه ای استفاده می کنند. ADO.NET می تواند با اکثر دیتابیس های موجود کار کند، هر چند به صورت پیش فرض در دات نت فریم ورک فقط فراهم کننده های SQL Server، OleDb و Odbc وجود دارد، افراد و شرکت های دیگر فراهم کننده های دیتابیس های دیگر را برای دات نت ایجاد کرده اند.

برای هر Provider کامپوننت هایی وجود دارند که برنامه نویس با استفاده از آن ها به مقصودش می رسد. به طور مثال برای استفاده از SQL Server در روش ADO.NET کامپوننت هایی مانند SQLConnection و SQLCommand وجود دارد که با استفاده از آن ها می توانید یک دستور SQL را روی داده های موجود در یک دیتابیس SQL Server اجرا کنید. با SQLConnection به دیتابیس موجود در SQL Server وصل می شویم و با استفاده از یک SQLCommand می توانیم یک عبارت T-SQL را که می تواند دستور INSERT, UPDATE, DELETE یا SELECT باشد یا حتی یک Stored Procedure یا عبارت DDL باشد را برای مقصود خاصی روی دیتابیس اجرا کنیم. چون ADO.NET در مورد سینتاکس دیتابیس چیزی نمی داند، دستورات را به صورت یک رشته ساده به SQLCommand می دهیم و این شیء نیز به صورت مستقیم به دیتابیس دستور می دهد.

string query = "SELECT * FROM tblCustomers";
SqlConnection con = new SqlConnection(cnnString);
SqlCommand command = new SqlCommand(query, con);
con.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Response.Write(reader.GetInt32(0) +
reader.GetString(1));
}

نکته ای که باید در مورد ADO.NET بدانید این است که برای استفاده از هر سیستم دیتابیس رابطه ای، مجموعه کامپوننت های جدایی وجود دارد. در مثال بالا از آبجکت های مربوط به SQL Server استفاده کردیم. اگر بخواهید مثلاً از یک دیتابیس اوراکل در برنامه خود استفاده کنید، بایستی از کامپوننت های مربوط به اوراکل استفاده کنید. خوشبختانه تمام این کامپوننت ها بر پایه یک Interface ساخته شده اند، این یعنی شما می توانید با استفاده از کلاس DbProviderFactory برنامه ای بسیازید که با چند نوع دیتابیس مختلف کار کند.

Linq to SQL

مایکروسافت با دات نت فریم ورک 3.0 و 3.5 یک ORM به نام Linq to SQL را به عنوان بخشی از پروژه LINQ خود عرضه کرد. این شرکت مدت ها پیش از آن قول داده بود که یک ORM برای دات نت فریم ورک طراحی کند اما تا نسخه 3.0 دات نت فریم ورک خبری از آن پروژه نشد. Linq to SQL به شما اجازه می دهد که کوئری های LINQ را روی دیتابیس های SQL Server اجرا کنید. علاوه بر این از یک Mapping Framework بهره می برد که به برنامه نویسان اجازه Map کردن جدول های یک دیتابیس را به کلاس ها و بالعکس می دهد. این کار در ویژوال استادیو می تواند به صورت ویژوال یا کدنویسی انجام گیرد. به این صورت که برای هر جدول از دیتابیس یک کلاس تعریف می شود که هر ستون از یک جدول به عنوان یک Property درون آن کلاس تعریف می شود.

نمایی از ابزار طراحی ویژوال Linq to SQL

به مثال زیر توجه کنید :
public class Customer
{
[Column(Name="CustomerID",IsPrimaryKey = true)]
public long ID
{
get { return _ID;}
set { _ID = value;}
}
[Column(Name = "CustomerName")]
public string Name
{
get { return _name; }
set { _name = value; }
}
}

کلاس بالا به جدول tblCustomers که دارای دو ستون CustomerID و CustomerName است Map می شود. قبل از اینکه بخواهید از Linq to SQL استفاده کنید باید این کلاس ها را تعریف کنید. ویژوال استادیو 2008 دارای ابزاری است که به صورت ویژوال به شما امکان Map کردن جدول های یک دیتابیس SQL Server را به کلاس های دات نت می دهد. این ابزار می تواند به صورت اتوماتیک کلاس های مورد نیاز شما را از روی مدل دیتابیس بسازد، و حتی اجازه تغییرات دستی و ایجاد Viewهای مختلف از دیتابیس را به شما می دهد. عملیات Mapping با استفاده از DataContext (که یک رشته اتصال به سرور نیاز دارد) پیاده سازی می شود. سپس شما قادر خواهید بود کوئری های LINQ خود را روی دیتابیس موجود در سرور اجرا کنید، که البته این کوئری ها ابتدا به دستوارت T-SQL متناظر ترجمه و سپس روی دیتابیس مورد نظر اجرا می شوند.

Entity Framework

Entity Framework یک فریم ورک ORM برای دات نت فریم ورک است که نسخه یک آن به همراه دات نت فریم ورک 3.5 سرویس پک 1 عرضه شد اما مورد استقبال توسعه دهندگان قرار نگرفت. نسخه 2 این فریم ورک به صورت بتا به عنوان بخشی از ویژوال استادیو 2010 قابل دسترس است. ADO.NET Entity Framework نام اصلی این فریم ورک است و جزئی از تکنولوژی ADO.NET است.

ابزار طراحی Entity Framework در ویژوال استادیو

ابزار طراحی Entity Framework در ویژوال استادیو

Entity Framework مدل رابطه ای موجود در یک دیتابیس را به مدل مفهمومی تبدیل می کند و آن را به اپلیکیشن ما تحویل می دهد. در مدل رابطه ای عناصر ترکیبی از جداول هستند، به همراه کلید های اصلی و خارجی که جدول ها را به هم مرتبط می سازند. برعکس آن، انواع موجودیت ها مدل مفهومی داده را تعریف می کنند. انواع موجودیت  اجتماعی از چند فیلد است (هر فیلد به یک ستون از دیتابیس Map می شود) و می تواند شامل اطلاعات از چند جدول فیزیکی باشد. انواع موجودیت می توانند به هم مرتبط باشند، مستقل از ارتباطاتی که در مدل فیزیکی دارند. شمای منطقی و نگاشت (mapping) آن به شمای فیزیکی به عنوان یک Entity Data Model یا EDM نمایش داده می شوند که مشخصات EDM در یک فایل XML ذخیره می شود. Entity Framework از EDM برای انجام عملیات نگاشت و دادن قابلیت کار با موجودیت ها به اپلیکیشن استفاده می کند. Entity Framework اطلاعات مورد نیاز هر موجودیت را با Join کردن چندین جدول از مدل فیزیکی (دیتابیس) بدست می آورد. هنگامی که اطلاعات یک موجودیت آپدیت می شود، Entity Framework بررسی می کند که داده ها مربوط به کدام یک از جدول های موجود در دیتابیس هستند، سپس آن ها را با دستور SQL مناسب آپدیت می کند.

هر چند Entity Framework و Linq to SQL بسیار شبیه به هم به نظر می رسند، هر دو ابزارهایی برای طراحی گرافیکی و ویزاردی برای نگاشت یک دیتابیس به مدل شیء گرا دارند و هر دو می توانند از کوئری های LINQ برای مقصود خاصی استفاده کنند، اما با هم تفاوت هایی هم دارند. بیان تفاوت های این دو در این مطلب جایی ندارد.

NHibernate

نمی توان در مورد ORMها در دات نت صحبت کرد اما نام NHiernate را ذکر نکرد. NH یک فریم ورک ORM اوپن سورس برای دات نت فریم ورک است که از روی پروژه موفق Hibernate جاوا وارد دنیای دات نت شد. توضیحات بیشتر در مورد NHibernate توضیحات اضافی است، زیرا این فریم ورک هم وظیفه ORMهای دیگر را انجام می دهد. اکثر برنامه نویسانی که از NH برای نگاشت استفاده می کنند، ابتدا کلاس های خود را تعریف می کنند و سپس با استفاده از یک فایل XML آن ها را به جدول های دیتابیس Map می کنند. Linq to SQL و Entity Framework برخلاف NHibernate از روش Model-first یا مبتنی در دیتابیس استفاده می کنند، به این معنی که هر دو ORM تصور می کنند شما دیتابیسی در اختیار دارید که می خواهید آن به تعدادی آبجکت Map کنید.

در مورد Nhibernate بیش از این صحبت نمی کنم، آقای وحید نصیری در اینجا به صورت کامل در مورد این ORM محبوب نوشته است.

farasun.wordpress.com

انتخاب از میان روش های بالا به عهده خود شماست. در این مطلب کوتاه نمی توان به بررسی تمام زوایا و تفاوت های میان آن ها پرداخت. در مطالب آینده سعی میکنم در مورد نحوه استفاده از هر کدام یک مثال عملی بزنم (البته به جز NHibernate).

دریافت پوستر SQL Server 2008 System Views

اگر شما برنامه نویس یا مدیر SQL Server 2008 هستید، حتماً باید این پوستر را داشته باشید.

ms-sql-server-2008-system-views

منبع

شاید این مطالب هم برای شما خواندنی باشند :

اگر تمایل به دنبال کردن مطالب این وبلاگ دارید، می توانید مشترک فید فراسان شوید.

چطور مشترک شویم؟

SQLite Wrapper برای دلفی 2009 و دات نت 2 و 3.5

برای انجام پروژه ای نیاز به استفاده از بانک اطلاعتی SQLite در دلفی 2009 و دات نت فریم ورک 2 دارم، همانطور که می دانید به صورت پیش فرض RAD Studio و دات نت فریم ورک کلاسی برای کار با SQLite ندارند. پس از کمی جستجو در وب سایت ها و همچنین پیشنهاداتی که در سایت رسمی SQLite داده شده (اینجا) بود یکسری Wrapper را مورد بررسی قرار دادم. برای دلفی 2009 کامپوننت RemObjects AnyDAC 2.0 راه حل خوبی است اما متاسفانه رایگان نیست. البته نسخه شخصی و رایگان DISQLite3 هم می تواند نیاز من را برطرف کند. اما در این میان با کلاس ساده و مناسبی برخورد کردم که هم رایگان است و هم ساده. برای دات نت فریم ورک من قصد دارم از این در پروژه ام استفاده کنم.

SQLite for Microsoft .NET framework and Delphi 2009

برای دلفی 2009

آقای Tim Anderson برای استفاده خودش Wrapper مناسب و ساده ای نوشته و آن را در اختیار عموم قرار داده است. این Wrapper شامل سه کلاس پایه است که اعمال درج, حذف، به روز رسانی و واکشی داده ها از یک دیتابیس SQLite را انجام می دهند. این Wrapper همچنین از تراکنش های بانک اطلاعاتی (Commit, RollBack) پشتیبانی می کند اما متاسفانه از قابلیت هایی مثل Full-text search پشتیبانی نمی کند. این کلاس ها را نمی توان در حالت طراحی (Design Time) استفاده نمود و بایستی برای استفاده از این Wrapper از کلاس های مورد نیاز خود نمونه سازی کنید. در واقع شما از دو کلاس TSQLiteDatabase و TSQLIteTable برای دستیابی به فایل دیتابیس و اعمال تغییرات در آن استفاده می کنید. نکته ای که باید در نظر داشته باشید این است که این Wrapper را نمی توانید با کامپوننت های دیگر همچون Dataset ارتباط دهید، در نتیجه نمی توانید از کامپوننت های DBAware مثل DBText استفاده کنید و یا داده ها را به یک DBGrid بایند کنید.

برای دریافت این Wrapper به این صفحه از سایت Tim Anderson مراجعه کنید. همراه با کلاس های فوق، یک برنامه نمونه ساده هم موجود است که نحوه ی استفاده از آن را به سادگی توضیح داده است.

برای دات نت فریم ورک 2 و 3.5

ADO.NET 2.0 Provider for SQLite دارای یک فایل اسمبلی است که شامل موتور دیتابیس SQLite و کلاس های ADO.NET مورد نیاز برای دسترسی و استفاده از SQLite می باشد. به سادگی فایل اسمبلی این Wrapper را به Referenceهای پروژه خود اضافه می کنید و از فضای نام System.Data.SQLite به کلاس های داخل آن دسترسی پیدا می کنید. اسمبلی دیگر این Wrapper به شما اجازه استفاده از LINQ به SQLite را می دهد. نحوه استفاده از کلاس های این Wrapper دقیقاً مشابه استفاده از کلاس های دیگر Data Providerها مانند OleDb و Sql است. این Wrapper از .NET Compact Framework نیز پیشتبانی می کند، پس می توانید از SQLite در برنامه های مبتنی بر ویندوز موبایل بهره ببرید.

این Wrapper را می توانید از اینجا دریافت کنید. در زیر مثالی از ایجاد یک جدول در یک فایل دیتابیس SQLite با استفاده از این Wrapper به زبان سی شارپ را مشاهده می کنید.

SQLiteConnection con = new SQLiteConnection("Provider=System.Data.SQLite;Data Source=C:\\data.db");
con.Open();
SQLiteCommand cmd = new SQLiteCommand(con);
cmd.CommandText = "CREATE TABLE farasun (post_id INT, title TEXT(150), post VARCHAR)";
cmd.ExecuteNonQuery();

فقط توجه داشته باشید که بایستی فضای نام System.Data.SQLite را using کرده باشید. اگر نیازی به توضیح بیشتر و مثالی واضح تر بود، در نظرات اعلام کنید.

به یاد داشته باشید که SQLite یکی از مناسب ترین راه حل ها برای ذخیره داده های محلی است. نرم افزارهای معروفی مثل Firefox و Google Gears از SQLite به صورت توکار (Built-in) استفاده می کنند.

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

MySQL انتخابی مناسب

اگر دنبال یک سیستم مدیریت بانک اطلاعاتی کم هزینه یا رایگان می گردید، چندین انتخاب مناسب پیش رو خواهید داشت : MySQL, PostgreSQL, SQLite و یا یک نسخه ی رایگان از نرم افزارهای تجاری همچون SQL Server Express.MySQL Logo هنگام انتخاب چنین نرم افزاری باید ببینید چه ویژگی ها و امکاناتی بیشتر از همه برای شما مهم است. کارایی، پشتیبانی، امکانات، مجوز استفاده (Licence) و قیمت، همه فاکتورهایی هستند که باید آن ها را در نظر بگیرید. بر همین اساس من بر اساس تجربه و نظر شخصی MySQL که دارای ویژگی های مناسبی است به شما پیشنهاد می کنم.

  • سرعت : MySQL بسیار سریع است. توسعه دهندگانی که با MySQL کار کرده اند به شما خواهند گفت که MySQL یکی از سریع ترین نرم افزارهای مدیریت بانک اطلاعاتی است که تا به حال تجربه کرده اید. برای تحقیق بیشتر در این زمینه به این صفحه از وب سایت رسمی MySQL مراجعه کنید.
  • سادگی در استفاده : MySQL بسیار قدرتمند و انعطاف پذیر است و کار کردن با آن از دیگر نرم افزارهای مدیریت بانک اطلاعاتی ساده تر خواهد بود. MySQL پیچیدگی های نصب و مدیریت سیستم های بزرگی همچون Oracle را ندارد و کاربری آن نسبتاً آسان است.
  • پشتیبانی از زبان پس و جو : MySQL از زبان استاندارد SQL که در تمام سیستم های مدیریت بانک اطلاعاتی مدرن استفاده می شود، پشتیبانی کامل می کند.
  • توانایی ها : سرویس دهنده ی MySQL دارای قابلیت Multi-thread است، که کلاینت های مختلف می توانند در یک زمان واحد به سرویس دهنده متصل شده و از آن سرویس بگیرند. شما قادر خواهید بود که با استفاده از رابط های مختلف به MySQL دسترسی پیدا کنید و از قابلیت های مختلف آن استفاده کنید. از طریق خط فرمان، مرورگر وب و یا برنامه های کاربردی مختلف می توانید به سرویس دهنده ی MySQL دسترسی پیدا کنید و پرس و جوهای مختلف را روی دیتابیس های موجود روی آن اجرا کنید و نتایج مورد نظر خود را بدست بیاورید. به علاوه، رابط های برنامه نویسی مختلفی برای زبان های متعددی از قبیل C, Perl, Java, PHP, Python و Ruby در دسترس است. حتی می توانید با استفاده از برنامه های کاربردی که از ODBC پشتیبانی می کنند، به سرویس دهنده MySQL دسترسی داشته باشید.
  • امنیت : MySQL کنترل دسترسی به داده ها را در پایگاه های داده به عهده می گیرد و اجازه ی دسترسی به داده ها را به افراد غیر مسئول نخواهد داد. برای فراهم نمودن امنیت بیشتر، MySQL از اتصالات کد گذاری شده با استفاده از پروتکل SSL پشتیبانی می کند.
  • پشتیانی از شبکه : MySQL برای کار در شبکه هی مختلف بهینه سازی شده است. بانک های اطلاعاتی MySQL در شبکه های محلی و اینترنت قابل دسترسی هستند و می توانید به داده های خود هر جا که هستید، دسترسی داشته باشید و با افراد مختلف به اشتراگ بگذارید.
  • عدم وابستگی به بستر اجرا (Cross-Platform) : این نرم افزار روی بسیاری از توزیع های لینوکس و همچنین سیستم عامل های غیر یونیکس، مانند ویندوز، NetWare, Mac و OS/2 به راحتی قابل نصب و اجراست. MySQL روی سخت افزارهای کامپیوترهای شخصی و همچنین سرورهای قدرتمند قابلیت اجرا دارد.
  • قیمت : MySQL یک پروژه اوپن سورس است و با دو مجوز GPL و تجاری قابل دسترس است. مجوز GPL برای کاربران خانگی که به پشتیبانی خاصی نیاز ندارند مناسب خواهد بود و مجوز تجاری برای شرکت هایی که نمی خواهند مواد مجوز GPL را رعایت کنند.
  • کد باز : دسترس بودن کد MySQL امکان اعمال تغییرات و سفارشی کردن آن را به شما می دهد. توسعه دهندگان می توانند نسخه ای کاملاً سفارشی از MySQL برای استفاده شخصی یا تجاری برای خود تهیه کنند.

در مورد پشتیبانی چطور؟ سئوال خوبی است، استفاده از یک سیستم بانک اطلاعاتی بدون گرفتن کمک تقریباً غیر ممکن است. منابع و راهنماهای زیادی برای MySQL وجود دارد. یک راهنمای جامع و رسمی در کنار نرم افزار MySQL توزیع می شود که با استفاده از آن می توانید به یک حرفه ای در این زمینه تبدیل شوید. در ضمن در جامعه اوپن سورس هیچ وقت تنها نخواهید بود و سئوالات شما هیچ گاه بی پاسخ نخواهند ماند.

پ.ن : متاسفانه پس از پیوستن MySQL به شرکت Sun Microsystems طبق سیاست های این شرکت، دریافت نرم افزار MySQL برای آی پی های ایران مقدور نمی باشد.

معرفی بانک های اطلاعاتی رایگان و اوپن سورس

امروزه در عصر فناوری اطلاعات جنبش های فراوانی برای حذف «کاغذ» از جریان زندگی و کار انسان ها شکل گرفته و همچنان به صورت کاملاً جدی و سریع در کشورهای پیشرفته و کمی کندتر در کشورهای در حال توسعه ادامه دارد. در عصر امروز، فقط نگهداری اطلاعات مهم نیست بلکه بازیابی، ایمن سازی، جستجو، پشتیبان گیری، انتقال، انجام محساسبات، ایجاد گزارش های دلخواه و … معنی جدیدی پیدا کرده اند. از آنجا که امروزه اطلاعات با استفاده از کامپیوتر مورد پردازش قرار می گیرد، نرم افزارهای بانک اطلاعاتی یا Databaseها از اهمیت بسیار زیادی برخوردارند. رد پای بانک های اطلاعاتی را می توانید در نرم افزارهای مختلف و حتی وب سایت های معمولی و ساده نیز مشاهده کنید. استفاده از این نرم افزارها بسیار گشترش یافته و به همین میزان امکانات و ابزارهای ایجاد بانک های اطلاعاتی افزایش و پیشرفت چشمگیری داشته اند.

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

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

بانک های اطلاعاتی اوپن سورس

FlashFiler : موتور بانک اطلاعاتی Client/Server که با استفاده از دلفی توسعه یافته است.

H2 Database Engine : یک موتور بانک اطلاعاتی جاوا که SQL استاندارد و JDBC API را پشتیبانی می کند.

MySQL : سرویس دهنده بانک اطلاعاتی معروف و شناختhttps://i0.wp.com/www.ukoln.ac.uk/web-focus/events/workshops/webmaster-2004/talks/rahtz/html/mysql.pngه شده، چند کاربره، انعطاف پذیر و قدرتمند که نسخه های مختلفی تحت سیستم عامل های ویندوز، سولاریس، لینوکس، FreeBSD، AIX، SunOS و … عرضه کرده است. بسیاری از سروس دهنده های وب هاستینگ این سیستم بانک اطلاعاتی را به شما پیشنهاد خواهند کرد. همچنین MySQL در ایران طرفداران و کاربران زیادی دارد.

HSQLDB : سیستم بانک اطلاعاتی رابطه ای بسیار سریع و کوچک که کاملاً با جاوا پیاده سازی شده است.

Perst : بانک اطلاعاتی شیء گرا برای استفاده در جاوا و دات نت.

DataReel : یک سیستم cross-platform برای ایجاد بانک های اطلاعاتی چند خطی و نرم افزارهای ارتباطی که برنامه های تحت این سیستم به راحتی در تمامی سیستم عامل های موجو قابل اجرا و پیاده سازی می باشند.

Apache Derby : یک سیستم بانک اطلاعاتی رابطه ای که کاملاً با جاوا ایجاد شده است.

PostgreSQL : یک سیستم مدیریت بانک اطلاعاتی رابطه ای کاملاً حرفه ای با پشتیبانی از تمامی قابلیت های زبان SQL، تراکنش ها، توابع تعریف شده توسط کاربر. قابلیت اجرا در سیستم عامل های بر مبنای یونیکس مثل انواع توزیع های لینوکس و FreeBSD.https://i1.wp.com/www.vitavoom.com/images/PostgreSQL_logo.png

IBM’s Cloudscape : سیستم بانک اطلاعاتی رایگان، اوپن سورس و بسیار کوچک IBM که کاملاً با استفاده از جاوا طراحی و پیاده سازی شده است. این یانک اطلاعاتی روی تمامی سیستم عامل هایی که Java Virtual Machine روی آن ها نصب می باشد، اجرا خواهد شد.

Firebrid : یک سیستم بانک اطلاعاتی رابطه ای برای لینوکس، ویندوز و توزیع های مختلف تحت یونیکس که بر مبنای Interbase طراحی و توسعه یافته است.

B-Tree Filer : یک سیستم بانک اطلاعاتی بر مبنای فایل (File-based) که با استفاده از محیط Borland Delphi طراحی و پیاده سازی شده است و قادر به ایجاد دیتابیس های نسبتاً سریع می باشد. دیتابیس هایی که با این نرم افزار ساخته می شوند به هیچ ابزار جانبی از قبیل BDE و یا DLLهای third-party وابسته نیستند و توزیع آن ها روی سیستم های کاربران به راحتی کپی کردن فایل های معمولی امکان پذیر خواهد بود.

Berkeley DB : این سیستم بانک اطلاعاتی شامل ابزارهای جهت ایجاد دیتابیس هایی توکار در نرم افزارهای دسکتاپ و سرور با کارائی بسیار بالاست. دارا بودن استانداردهای یک سیستم بانک اطلاعاتی رابطه ای، قابلیت Hashing رکوردها، رکوردhttps://i2.wp.com/www.oracle.com/technology/products/berkeley-db/images/berkeley-db-logo.gifهای ثابت و با طول متغیر، صف بندی ، مدیریت تراکنش ها و پشتیبان گیری از دیتابیس ها به صورت آنلاین از قابلیت های این سیستم به شمار می روند. پشتیبانی از API های زبان های برنامه نوبسی C, C++, JAVA, Tcl, Perl و Python و قابلیت اجرا روی ویندوزهای 95/98/NT/2000 ، لینوکس و بسیاری از توزیع های بر مبنای Unix. کاملاً رایگان برای استفاده های غیرتجاری یا استفاده در نرم افزارهای اوپن سورس.

SQLite* : یک Library کوچک، کم حجم و پرقدرت به زبان C که قادر به ایجاد بانک های اطلاعاتی توکار در نرم افزارهاست. بر خلاف سیستم های مدیریت بانک های اطلاعاتی Client\Server، موتور بانک اطلاعاتی SQLite تنها یک کتابخانه است که با اتصال به برنامه های مختلف، جزئی  از آن برنامه ها می شود. نرم افزارهای معروفی همچون Firefox, Google Gears, Ruby on Rails از SQLite به صورت توکار استفاده می کنند.

بانک های اطلاعاتی رایگان

Sybase ASE Express : ویرایش رایگان Sybase for Linux

Real Isam : یک کتابخانه (DLL) که از متدهای ISAM برای مدیرت و دستیابی به رکوردهای دیتابیس استفاده می کند. این کتابخانه می تواند در زبان های C++، Visual Basic، Delphi و غیره مورد استفاده قرار گیرد. (فقط برای ویندوز)https://i0.wp.com/www.techlog.org/images/sqlserver_express_logo.gif

Microsoft SQL Server Express Edition : نسخه رایگان و بدون محدودیت نرم افزار تجاری و پرقدرت SQL Server از شرکت مایکروسافت (فقط بری ویندوز)

منابع : Sourceforge.net , Freebyte.com, Oracle.com

* با تشکر از آقای مهرداد حاج ابوطالبی به خاطر یادآوری SQLite