حسین کعبی: وقتی فیگو را در جام جهانی زدم....
یکی از این مدلها Relational Database است که در واقع ایجاد یک محیط رابطهای بر اساس تئوری مجموعهها در ریاضی مطرح و پیادهسازی شد.
ساختار دادهها در این محصولات به صورت جدول است، با این تفاوت که میتواند چند سطر داشته باشد. به عبارت دیگر دارای جداول چندگانه است که به طور صریح ارتباطات بین آنها بیان نمیشود و در عوض کلیدهایی به منظور تطبیق سطرها در جداول مختلف استفاده میشود.
در سیستمهای رابطهای ارتباط بین جداول و چگونگی پیادهسازی آن و نحوه دسترسی به دادهها در آن یکی از مسائل مهم و تعیینکننده است. در این شماره قصد داریم این مدل رابطهای و دسترسی به دادهها را بررسی و روش مناسبی برای دسترسی به اطلاعات پیادهسازی کنیم.
قبل از هر چیزی باید آشنایی مختصر در مورد زبان SQL که زبان ساختار یافتهای است و بر اساس این مدل پایگاه داده طراحی شده و یک استاندارد برای تمامی RDBMS (سیستم پایگاه داده رابطهای) است. اما زبان SQL برای پایگاه دادههای مختلف دستخوش تغییراتی بوده که هر سیستم بر اساس نیاز خود امکاناتی که دارد زبان SQL را بر اساس همان استاندارد اولیه بازنویسی کرده است.
قبل از هر چیز باید جداول خود را در MySql به صورت زیر پیادهسازی کنیم:
CREATE TABLE `user` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`course` smallint(5) unsigned DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
CREATE TABLE `course` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
کد بـــالا دو جدول یکی به نام User و دیگری به نام Course ایجاد میکند، حالا قرار است با مطرحکردن مسالهای که مشخص کند چه کاربری چه درسی را دارد مدل رابطهای را مطرح کنیم.
قبل از آن نیاز است انواع روابط بین جداول را مطرح کنیم، جداول به سه حالت میتوانند با یکدیگر رابطه داشته باشند؛
۱ ـ یک به چند: یعنی هر رکورد از جدول x با چند رکورد از جدول y رابطه دارد
۲ ـ چند به چند: در این مدل یک رکورد از جدول x با چند رکورد از جدول y رابطه دارد، اما برعکس مدل یک به چند که هر رکورد از جدول y با یک رکورد از جدول x رابطه دارد در این مدل هر رکورد از جدول y با چند رکورد از جدول x در رابطه است.
۳ ـ یک به یک: هر رکورد از جدول x با یک رکورد از جدول y رابطه دارد (مثال بالا).
نکته: رابطه در مدلهای رابطهای از طریق کلید اصلی و کلید فرعی انجام میشود.
حالا باید بین جدولهای user و course رابطه برقرار کنیم.
ALTER TABLE `user`
ADD CONSTRAINT `FK_course`
FOREIGN KEY (`course`) REFERENCES `course` (`id)`
ON UPDATE CASCADE;
در کد بالا ما فیلد id جدول course را به عنوان یک کلید خارجی در فیلد course جدول user قرار دادیم.
بسیار خب حالا قرار است مساله را حل کنیم، یعنی اینکه چه کاربرانی چه درسهایی دارند.
بگذارید مساله را ریاضیوار حل کنیم، برای اینکه بدانیم چه کاربری چه درسی دارد باید از دو جدول استفاده کنیم و از اولی نام کاربر و از دومی نام درس را بیاوریم. اولین کوئری شما بهصورت زیر است:
Select user.name, course.name
From user,course
اما خروجی چه چیزی خواهد بود؟ به ازای تمام کاربران تمام درسها را میآورد، حالا چه کاربری آن را انتخاب نکرده باشد، در واقع همان ضرب دکارتی دو مجموعه، حال مشکل را چگونه حل کنیم؟ کافی است ما مقدار course.id را با user.course بررسی کنیم (شرطی درستی مقایسه این است که کاربر آن درس را انتخاب کرده باشد)
Select user,name, course.name
From user,course
Where course.id = user.course
اگر کوئری بالا را اجرا کنید تمام درسهای کاربران نمایش داده میشود، اما این تمام چیزی نیست که ما میخواهیم، بعضی وقتها نیاز است که این کوئری اطلاعات بیشتری به ما دهد. در شماره بعدی در مورد این موضوع بیشتر بحث خواهیم کرد.
امیر بهاالدین سبطالشیخ
حسین کعبی: وقتی فیگو را در جام جهانی زدم....