آشنایی با مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) و نکاتی در مورد طراحی آنها، در SQL

در این کلید آموزشی، قصد داریم که در مورد مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row)، صحبت کنیم.

اگرچه شرح این مفاهیم به عنوان یک آموزش پایه برای یادگیری SQL کافی خواهد بود، اما بنده ترجیح می دهم برخی نکات در مورد چگونگی طراحی پایگاه های داده (Database) و ساختار جدول ها (Table) در سیستم های پایگاه داده (Database System) (مثل MySQL در سرور اینترنتی) را نیز در همین مبحث شرح بدهم. زیرا مثلا اگر شما یک طراحی اشتباه برای پایگاه های داده (Database) و جدول ها (Table) داشته باشید، در آینده مجبور خواهید شد که با صرف زمان زیادی، دوباره آنها و احتمالا کدنویسی های مرتبط با آنها را تغییر دهید.

بنابراین با ذکر برخی ویژگی های سیستم های پایگاه داده (Database System) که بر اساس SQL هستند و همچنین موارد مربوط به پایگاه های داده (Database) و ساختار جدول ها (Table)، سعی می کنیم که نکات مهم طراحی مرتبط با آنها را نیز ذکر نماییم.

شرح ساختار پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) :

برای درج اطلاعات خود، قبل از هر چیز، باید یک پایگاه داده (Database) بسازیم. بعد در پایگاه داده (Database)، می توانیم تعدادی جدول (Table) بسازیم که در هنگام ساخت آنها، ستون هایی (Column) را برای هر جدول (Table) تعریف خواهیم کرد. سپس می توانیم اطلاعات مورد نظر خود را به صورت ردیف های (Row) جدید در جدول (Table) مورد نظرمان، ذخیره کنیم.

برای اینکه بتوانیم با یک پایگاه داده (Database) کار کنیم، باید اطلاعات حساب کاربری (User) که به آن دسترسی دارد را داشته باشیم، یعنی نام کاربر و رمز عبور (Password). فعلا با این موضوع که در سیستم های پایگاه داده (Database System) مختلف، چگونه کاربر جدید ایجاد می کنند و به آن کاربر، اجازه دسترسی به تعدادی پایگاه داده (Database) می دهند، کاری نداریم، فقط این را بدانید که در این سیستم ها، فقط هنگام اتصال به پایگاه داده (Database) (مثلا در خط اول کدنویسی اتصال به پایگاه داده)، باید اطلاعات کاربری خود برای دسترسی را بنویسید و بعد می توانید با جدول های (Table) موجود در آن پایگاه داده (Database) کار کنید.

به عنوان یک مثال، فرض کنید در همین وب سایت کلیدستان (kelidestan.com)، ما قصد داریم که اطلاعات را در پایگاه داده قرار دهیم (با فرض اینکه همان خروجی وب سایت را به صورت یک تصویر نهایی در ذهن داریم و می خواهیم اکنون ساختار پایگاه داده (Database) آن را ایجاد کنیم).

نکته

دقت کنید آنچه که ما اکنون می گوییم را فعلا تنها بر روی کاغذ می نویسیم و تا نهایی نشدن تصمیم گیری در مورد ساختار آنها، کاری با ایجاد پایگاه داده (Database) و جدول ها (Table) و ... نداریم.

همچنین ساختارها را تا حد لازم، ساده در نظر می گیریم تا فعلا شما با مفاهیم اولیه آشنا شوید و جزئیات بیشتر را خود شما می توانید به آنها اضافه نمایید.

در مرحله اول، ساخت پایگاه داده و اینکه چه تعداد پایگاه داده (Database) مد نظرمان است، مهم می باشد. بنده با توجه به اینکه سه بخش مهم ((آموزش های اصلی کلیدستان))، ((انجمن)) و ((فروشگاه اندروید)) را داریم، 3 پایگاه داده با نام های زیر برای آنها در نظر می گیرم (ممکن است فرد دیگری تصمیم بگیرد که تنها 1 پایگاه داده بسازد) :

نکته

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

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

بنابراین باید یک جدول (Table) داشته باشیم که مشخصات کلید های آموزشی (key) در آنها ذکر شود. برای این منظور، ساختار ابتدایی جدول (Table) را به صورت زیر در نظر می گیریم (نام جدول را برابر kelidestan_key در نظر می گیریم) (این عکس، فعلا یک طرح به شکل جدول بر روی کاغذ است) :

آشنایی با مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) و نکاتی در مورد طراحی آنها، در SQL

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

نکته

توصیه می شود نام جدول ها (Table) را به گونه ای انتخاب کنید که برنامه نویس با دیدن نام هر جدول (Table)، سریعا متوجه شود که مربوط به ذخیره چه اطلاعاتی است.

در بالای عکس، عنوان هر ستون (Column) را نوشته ایم :

آشنایی با مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) و نکاتی در مورد طراحی آنها، در SQL

بنابراین با این طرح اولیه، 4 ستون (Column) برای جدول kelidestan_key خواهیم داشت. وقتی جدول (Table) می سازیم و ستون های (Column) آن را تعیین می کنیم (تعیین ستون در همان مرحله ساخت جدول صورت می گیرد)، هنوز اطلاعاتی در جدول (Table) ذخیره نشده است. اطلاعات به صورت ردیف (Row) در جدول (Table) ذخیره می شوند، مثل اطلاعات همین 5 ردیفی که در طرح اولیه به صورت مثال نوشته ایم :

آشنایی با مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) و نکاتی در مورد طراحی آنها، در SQL

اطلاعات به صورت ردیف (Row) به ردیف (Row) به جدول (Table) اضافه می شوند. بنابراین 5 ردیف بالا، اطلاعات مربوط به 5 کلید آموزشی را در جدول (Table) ذخیره کرده اند.

بنابراین مثلا اگر بخواهیم بدانیم که موضوع آن 5 کلید آموزشی چه بوده، کافی است که ستون (Column) مربوط به ((موضوع)) را بخوانیم :

آشنایی با مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) و نکاتی در مورد طراحی آنها، در SQL

یا اگر بخواهیم متوجه شویم که کلیدی که با شماره 2 شناخته می شود، دارای چه ((موضوع))، ((عنوان)) و ((کلمات کلیدی)) است، باید ردیف (Row) زیر از جدول (Table) را بخوانیم :

آشنایی با مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) و نکاتی در مورد طراحی آنها، در SQL

اکنون که توضیحات اولیه ای در مورد ساختار جدول (Table) و ستون ها (Column) و ردیف های (Row) مربوط به آن، ارائه کردیم، یک جدول دیگر با نام kelidestan_user را مثال می زنیم که در آن، باید اطلاعات کاربران وب سایت کلیدستان (که در سایت ثبت نام کرده اند)، ذخیره گردد :

آشنایی با مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) و نکاتی در مورد طراحی آنها، در SQL

این جدول (Table)، دارای 4 ستون (Column) بوده و 4 ردیف (Row) را هم به عنوان مثال برای آن ذکر کرده ایم.

ساختارهای بهینه در جدول های پایگاه داده :

یک نکته مهم در طراحی جدول ها (Table)، این است که از درج اطلاعات تکراری در جدول های (Table) مختلف تا حد ممکن خودداری کنیم. یعنی ممکن است یک سری اطلاعات را در دو یا چند جدول (Table) از پایگاه داده (Database)، تکرار کنیم، در صورتی که می توان اطلاعات را تنها در یک جدول (Table) ذخیره نمود و سپس در جدول های دیگر، تنها به آنها در جدول مورد نظر، ارجاع بدهیم. در ادامه، این نکته را با یک مثال، بیشتر توضیح می دهیم.

همان جدول kelidestan_key را در نظر بگیرید :

آشنایی با مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) و نکاتی در مورد طراحی آنها، در SQL

همان طور که مشاهده می کنید، در ستون ((موضوع))، ممکن است که بارها، یک موضوع تکراری داشته باشیم. مثلا 100 کلید آموزشی در مورد HTML باشد و 200 کلید آموزشی در مورد PHP . پس نیازی نیست که عنوان ((آموزش HTML)) را 100 بار در جدول تکرار کنیم، بلکه می توانیم یک جدول جدید با نام kelidestan_subject بسازیم که در آن، موضوع های مختلف ذکر شوند و برای هر موضوع، یک شماره متناظر داشته باشیم. سپس در جدول kelidestan_key ، تنها شماره مربوط به آن موضوع را ذکر می کنیم.

پس در مرحله اول، جدول kelidestan_subject را می سازیم (با توجه به موضوع های ذکر شده در جدول kelidestan_key) :

آشنایی با مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) و نکاتی در مورد طراحی آنها، در SQL

سپس در جدول kelidestan_key ، ستون ((موضوع)) را به ((شماره موضوع)) تغییر می دهیم و شماره متناظر با هر موضوع را در آن قرار می دهیم :

آشنایی با مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) و نکاتی در مورد طراحی آنها، در SQL

بنابراین هر زمان که بخواهیم ((موضوع)) یک کلید آموزشی را بدانیم، ((شماره موضوع)) آن را از جدول kelidestan_key به دست آورده و سپس موضوع متناظر با آن شماره را از جدول kelidestan_subject به دست می آوریم.

نکته

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

تا اینجا، طرح 3 جدول را در کاغذ نوشته ایم، اکنون با توجه به اینکه نام هر ستون (Column) باید به انگلیسی انتخاب شود، برای ستون های مختلف این سه جدول، نام هایی را انتخاب می کنیم :

آشنایی با مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) و نکاتی در مورد طراحی آنها، در SQL

اکنون برخی نکات مهم مربوط به این طرح اولیه برای جدول ها (Table) را شرح می دهیم.

نکته

توصیه می شود نام ستون ها (Column) به گونه ای انتخاب شوند که برنامه نویس با دیدن نام هر ستون (Column)، سریعا متوجه شود که مربوط به ذخیره چه اطلاعاتی است.

علاوه بر این، همان طور که مشاهده می کنید، یک ((پیشوند)) ثابت برای نام ستون های (Column) هر جدول (Table) به کار رفته که به ما کمک می کند تا متوجه شویم هر ستون، مربوط به کدام جدول (Table) می باشد. به عنوان مثال، در جدول kelidestan_key ، نام همه ستون ها (Column) با پیشوند key_ شروع می شود.

نکته

از همین طرح اولیه، باید تصمیم بگیریم که نوع هر ستون (Column)، چه باشد (نوع ذخیره اطلاعات در ستون). زیرا هنگام ساخت جدول (Table)، باید نوع هر ستون را مشخص کنیم. مثلا INT یک نوع رایج برای ذخیره عدد و VARCHAR یک نوع رایج برای ذخیره متن (رشته - String) می باشد. بنابراین وقتی نوع یک ستون (Column) را برابر INT تعیین می کنیم، دیگر نمی توانیم در آن، متن (رشته - String) ذخیره کنیم.

همچنین برای مواردی که ستون (Column) به صورت یک عدد منحصربفرد (id) است که با درج هر ردیف جدید، یک واحد به آن اضافه می شود، باید ستون به صورت AUTO_INCREMENT باشد که باعث می شود اولین شماره آن از 1 شروع شده و با درج هر ردیف (Row) جدید و بدون اینکه مقداری برای آن ستون درج کنیم، یکی به مقدار عدد قبلی (در ردیف قبلی) اضافه کرده و عدد حاصل را به عنوان شماره منحصربفرد (id) در ردیف جدید ذکر نماید (در آینده مبحثی را در مورد AUTO_INCREMENT خواهیم نوشت). مقادیر اینگونه ستون ها (Column) را با رنگ قرمز در جدول ها نشان داده ایم (معمولا اینگونه ستون ها به عنوان اولین ستون جدول در نظر گرفته می شوند).

با این مثال، سعی کردیم که با نوشتن طرح سه جدول (Table) بر روی کاغذ، شما یک تصویر اولیه از مفاهیم پایگاه داده (Database)، جدول (Table)، ستون (Column) و ردیف (Row) داشته باشید. قطعا این مفاهیم، شامل نکات دیگری هستند که در این طرح اولیه، ذکر نشده اند و بنابراین در کلیدهای آموزشی دیگر سعی می کنیم که هنگام آموزش موارد جدید مثل ساخت جدول (Table)، چگونگی تعریف ستون ها (Column) در هنگام ساخت جدول (Table)، چونگی درج یک ردیف (Row) جدید در جدول (Table) و ... ، شما را با آن نکات آشنا کنیم.

در ادامه همین مبحث، چند نکته دیگر در زمینه طراحی پایگاه های داده (Database) و جدول ها (Table) را ذکر می کنیم، بنابراین قبل از طراحی پایگاه های داده (Database) و جدول ها (Table) بر روی کاغذ و یا در ذهن خود، ابتدا نکات قبلی و نکاتی که در ادامه ذکر می شود را در نظر بگیرید.

انتخاب تعداد پایگاه داده (Database) و اینکه چه اطلاعاتی در آنها قرار بگیرد :

فرض کنید که شما، مقداری اطلاعات دارید که مثلا اگر آنها را به صورت کلی، بر اساس موضوع و نوع اطلاعات یا ... ، گروه بندی کنید، ممکن است در 5 گروه قرار بگیرد که هر گروه، خود دارای 3 زیرگروه متفاوت باشد. اما این سوال پیش می آید که این 15 زیرگروه به چه صورت در پایگاه های داده (Database) و جدول ها (Table) قرار بگیرند. مثلا 5 پایگاه داده بسازیم که هر کدام داری 3 جدول باشند، یا یک پایگاه داده بسازیم که دارای 15 جدول باشد و نامگذاری جدول ها به گونه ای باشد که تشخیص دهیم که هر جدول، مربوط به کدامیک از آن 5 گروه اصلی بوده است (با تعیین پیشوندهای یکسان در نام تعدادی از جدول ها). یا اینکه دو گروه را در یک پایگاه داده (با 6 جدول) و 3 گروه را در یک پایگاه داده دیگر (با 9 جدول) قرار دهیم. یا تمامی حالت های ممکن دیگر.

در واقع در مثال قبلی که بنده تصمیم گرفتم 3 پایگاه داده (Database) بسازم، ممکن است فرد دیگری ترجیح دهد که همه آنها در یک پایگاه داده (Database) باشند یا اینکه فرد دیگری، تعداد بیشتری پایگاه داده (Database) در نظر بگیرد.

بنابراین مشاهده می کنید که انتخاب نوع طراحی پایگاه های داده (Database) و جدول ها (Table)، بسیار مهم است و در ابتدا، باید وقت بگذارید و در مورد تعداد پایگاه های داده (Database) و جدول ها (Table) و چگونگی طراحی آنها، فکر کنید.

قصد دارید اطلاعات توسط چه کسانی خوانده شود ؟

نکته مهم در مورد سیستم های پایگاه داده (Database System) (مثل MySQL در سرور اینترنتی)، این است که آنها برای هر پایگاه داده (Database)، فهرستی از کاربران (User) دارای اجازه دسترسی به آن پایگاه داده (Database) را دارند.

نکته مهم

منظورمان از ((کاربر)) در اینجا، کاربر معمولی وب سایت نیست، بلکه کاربری است که در سیستم های پایگاه داده (Database System) تعریف می کنیم که بعدا می توانیم با استفاده از نام کاربری و رمز عبور (Password) وی، به یک یا چند پایگاه داده (Database) که به آنها اجازه دسترسی دارد، متصل شده و اطلاعات آنها را بخوانیم.

بنابراین برای اینکه یک کاربر (User) بتواند اطلاعات یک پایگاه داده (Database) خاص را بخواند، باید نام کاربری و رمز عبور (Password) خود برای اتصال به پایگاه داده (Database) را ارسال کند (معمولا در بخشی از کدنویسی درج می شوند) و اگر سیستم تشخیص دهد که کاربر مورد نظر در فهرست کاربران دارای مجوز دسترسی به آن پایگاه داده (Database) است، آنگاه اطلاعات مورد درخواست کاربر را برای وی ارسال می کند، در غیر این صورت، یک پیام با این عنوان که دارای اجازه دسترسی به پایگاه داده نیست، به کاربر نمایش داده می شود.

پس اگر مثلا شما یک تیم 7 نفره برنامه نویسی هستید (مثلا صاحبان و برنامه نویسان اصلی یک وب سایت) و شما به عنوان نفر اصلی، اطلاعاتی دارید که نمی خواهید 6 نفر دیگر به آنها دسترسی داشته باشند، باید آن اطلاعات را در پایگاه های داده (Database) جداگانه ای قرار دهید که دیگران با حساب کاربری خود، به آنها دسترسی نداشته باشند.

نکته

بنده فرض کرده ام که تنها شما دسترسی مستقیم به بخش پایگاه داده سرور دارید و سایر اعضای تیم، تنها با قرار دادن فایل هایی در هاست (host) یا هر روش دیگر، کدهای مورد نظر خود را اجرا می کنند (چون مثلا اگر فردی رمز دسترسی به phpMyAdmin در سرور اینترنتی را داشته باشد، می تواند اطلاعات پایگاه های داده را ببیند).

پس یک نکته مهم برای انتخاب اینکه اطلاعات در چند پایگاه داده (Database) قرار بگیرند، این است که در تیم اصلی برنامه نویسی یا هر نوع طبقه بندی که برای افراد دارای توانایی کدنویسی و اجرای کد ایجاد کرده اید، باید بررسی کنید که قصد دارید اطلاعات در اختیار چه اشخاصی باشد (در واقع می شود مدیریت اطلاعات در پایگاه های داده (Database) مختلف و همچنین مدیریت دسترسی اعضای تیم به آنها).

مثلا اگر قصد دارید که همه اطلاعات در دسترس همه اعضای تیم برنامه نویسی باشد، می توانید یک یا چند پایگاه داده (Database) بسازید، بعد یک حساب کاربری (User) ایجاد می کنید و آن حساب کاربری را برای همه پایگاه های داده به عنوان کاربر دارای اجازه دسترسی ذکر می کنید و در آخر، نام کاربر و رمز عبور وی را در اختیار تمامی اعضای تیم برنامه نویسی قرار می دهید تا همگی بتوانند با کدنویسی، اطلاعات مورد نظر خود را از پایگاه های داده (Database) مورد نظر، بخوانند.

  • فهرست مباحث
نویسنده علیرضا گلمکانی
شماره کلید 26207
گزینه ها
به اشتراک گذاری (Share) در شبکه های اجتماعی
نظرات 1 1 0
مسافر
۱۴۰۱/۰۵/۲۵
۱۰:۰۵

خیلی ممنونم

ارسال نظر جدید (بدون نیاز به عضو بودن در وب سایت)