وقتی امروز در مورد «دیتابیس» حرف میزنیم، شاید کمتر به ذهنمان برسد که پشت این فناوری به ظاهر ساده، یک ذهن ریاضیاتی خارقالعاده قرار دارد که حدود نیمقرن پیش مسیر علم داده و توسعه نرمافزار را برای همیشه تغییر داد. Edgar Frank Codd، مردی که اکثر متخصصان کامپیوتر او را «پدر پایگاههای داده رابطهای» مینامند، نه فقط یک محقق، بلکه پلی بود بین نظریههای ریاضی و نیازهای واقعی دنیای فناوری. یکی از استوره های علمی که من همیشه دوست داشتم از منظر تفکری دنباله روی مسیر ایشون در حوزه دیتابیس و پایگاه داده باشم.
امروز میخوام کمی درباره ایشون صحبت کنم و کارهایی که در زمینه دیتابیس و پایگاه داده انجام داده رو مورد بررسی قرار بدیم. این مقاله احتمالاً برای همه مهندسان جذاب نباشه و قشر خاصی از معماران پایگاه داده، مدیران پایگاه داده و برنامه نویسانی که به نحوی درگیر هستند با دیتابیس و موضوعات اون رو دربر بگیره. اطلاعات ایشون در IBM موجود هست و برای شخص خودم که همیشه معماری های پشت پرده دیتابیس ها و ساختار هایی که وجود داره از اهمیت ویژه ای برخورد بوده، شناخت افرادی که زندگی خودشون رو در این مسیر گذاشتند، یک الزام بوده برام و هر کلمه ای که از این افراد یاد گرفتم، برام ارزشمند بوده. آقای Codd در سال 2003 در حدود 79 سالگی از دنیا رفتند و ما یکی از پایه گذاران معماری و در اصل پدر پایگاه های داده رابطه ای رو از دست دادیم.

Edgar Frank Codd در ۱۹ آگوست ۱۹۲۳ در جزیره «Portland» در سواحل جنوبی انگلستان به دنیا آمد. او تحصیل در ریاضیات و شیمی را در دانشگاه آکسفورد آغاز کرد، اما با شروع جنگ جهانی دوم راهی خدمت در نیروی هوایی سلطنتی بریتانیا (RAF) شد. پس از جنگ، در سال ۱۹۴۸ به ایالات متحده مهاجرت کرد و خیلی زود راهش به گروههای تحقیقاتی IBM باز شد.
در دههی ۱۹۶۰، Codd به دانشگاه میشیگان رفت و دکترای علوم کامپیوتر گرفت؛ رشتهای که آن زمان هنوز در بسیاری از دانشگاهها وجود نداشت. پایاننامهاش درباره اتوماتای سلولی (cellular automata) بود. شاخهای از علوم نظری که بازتابدهنده ذهن ریاضیاتی عمیق او است. دو سال بعد از دریافت دکترا، او به آزمایشگاه تحقیقات IBM در سانخوزه، کالیفرنیا منتقل شد و دقیقاً همانجا بود که یکی از مهمترین ایدههای تاریخ کامپیوتر شکل گرفت.
تا اواخر دههی ۱۹۶۰، پایگاههای داده به شکلهای پیچیده و سختفهم ذخیره و بازیابی میشدند. معماریهای سلسلهمراتبی و شبکهای، برای دستیابی به دادهها نیاز به برنامهنویسان خبره داشتند و عملاً استفاده برای کاربران عادی دشوار بود. در سال ۱۹۷۰، Codd مقالهای منتشر کرد با عنوان «A Relational Model of Data for Large Shared Data Banks» که در آن پیشنهاد داد دادهها باید بهصورت جدولهایی مرتب ذخیره شوند. جایی که روابط بین دادهها با مشخصههای مشترک (کلیدها) تعریف میشود، نه با آدرسهای فیزیکی روی حافظه. من این مقاله رو خوندم و مطمن هستم برای هر معمار پایگاه داده و مدیر دیتابیسی که پایه های موضوعات فنی دیتابیس براش مهم هست، ارزشمند و جذاب خواهد بود. دانشگاه پنسیلوانیا این رو داره و میتونید از این لینک بخشی از مقاله رو بخونید. این ایده انقلابی بود. بهجای اینکه کاربر بداند دیتای شما کجا و چگونه ذخیره شده، فقط بتواند مفهوم دادهها را بفهمد و با یک زبان پرس و جو (query) ساده پاسخ بگیرد. دوستان خواهش میکنم اینجا دقت کافی رو داشته باشید. ایشون ایده کلی رو مطرح کردند و هنوز در این بازه، چیزی وجود ندارد.

هرچند مفهوم رابطهای ابداع Codd بود، اما اولین دیتابیسهای تجاری مبتنی بر آن چند سال طول کشید تا پدید بیایند. تیمی در IBM روی پروژهای به نام System R کار کردند و در همین مسیر بود که SQL یعنی محبوبترین زبان پرس و جوی داده در تاریخ شکل گرفت. بچه ها همیشه از من میپرسند آقا این SQL از کجا اومده و چه کسانی روش کار کردند. سوال خیلی از عزیزان هست. ریشه SQL همین جاست. رقبا نیز از این ایده استقبال کردند. شرکتهایی مثل Oracle (که بعداً یکی از ارکان صنعت دیتابیس شد) توانستند این ایده را زودتر به بازار بیاورند و از آن سود ببرند.

Codd فراتر از ایده جدولها رفت. ایشون قوانین ریاضی پشت پایگاههای داده را هم تعریف کرد، مثل فرمهای نرمالسازی دادهها که به طراحی صحیح دیتابیس کمک میکنند. یکی از معروفترین آنها، Boyce–Codd Normal Form (BCNF) است که نام او را نیز یدک میکشد. همیشه به بچه های دیتابیسی میگم که مفاهیمی که امروزه داریم روش کار میکنیم و در کار های روز مره ازشون استفاده میکنیم مثل موضوعات نرمال سازی و سطوح آن که به 1NF، 2NF، 3NF، 4NF، 5NF و موضوعات که ذکر شد مثل BCNF و حتی PJ/NF ریشه شون اینجاست. ایشون همچنین مجموعهای از ۱۲ قاعده تعریف کرد که مشخص میکند یک سیستم مدیریت دیتابیس واقعاً رابطهای است یا فقط اسمش را یدک میکشد. اگر اطلاعاتی راجع به این موضوع ندارید میتونید با یک سرچ ساده یا مراجعه به این لینک، اطلاعات لازم رو کسب کنید.
اگر میخواهید اطلاعات رو از زبان خود IBM بخونید، بهتره به این لینک هم سری بزنید.