دوره مجازی PHP (جلسه 15): آشنایی با اصول و مفاهیم پایگاه داده (database)



visibility  
mode_comment   ۶۰

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

:: در این جلسه به تشریح مطالب زیر خواهیم پرداخت :

فصل 12 : اصول طراحي پايگاه داده (Database)

  • پايگاه داده (Database) و سيستم مديريت پايگاه داده (DBMS) چيست ؟
  • استفاده از پايگاه داده در مقابل فايل ها
  • انواع مختلف پايگاه هاي داده
  • پايگاه هاي داده رابطه اي (Relational Database)
  • مدل ER و مفاهيم پايه ي آن (Entity Relationship Model)
  • تشريح انواع رابطه ها (1-1, n-1, n-m)
  • تشريح مفاهيم ديتابيس (جدول، رابطه، کليدها، فيلدها و رکوردها)
  • ايندکس ها، کليدهاي اصلي و کليد هاي خارجي
  • مفاهيم مهم در طراحي پايگاه داده
  • اشتباهات رايج در طراحي پايگاه داده و تشريح مشکلات آن
  • نرمال سازي جداول پايگاه داده
  • ميني پروژه : طراحي پايگاه داده براي يک فروشگاه اينترنتي
  • تمرين
info توجه

این مطلب یک جلسه از اموزش php حرفه ای می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در اموزش php حرفه ای

comment دیدگاه کاربران
neyvid replyپاسخ

سلام خسته نباشید دکتر جان.ممنون بسیار عالی بود.
نمیدونم این مواردی که ذکر میکنم را در قسمت های بعدی عنوان نمودید با نه اما اگر عنوان نکردید خواهش میکنم لحاظ بفرمایید:
1-وقتی ما دیتا بیس را طراحی کردیم و تمام شد چگونه میتوان از آن بک آپ گرفت؟
2-ففایل های دیتا بیس به چه پسوند های قابل ذخیره شدن هستند و پیش فرض جیست؟
3-دیتا بیسی که میسازیم پیش فرض کجای سیستم(فایل یا دایرکتوری) ذخیره میشه و چگونه میشه اون را اصطلاحا portable کردن( همون import کردن و .).بطور مثال من میخوان کل دیتا بیس طراحی شده خودم را به دوستم بدهم که اونم روش کمی کار کنه و یا تغییرات بده و …
4-این که فرمودین آینده نگری کنیم منظورتون چجوریه؟من مثلا میخوام یه سایت بسازم که حالا شاید بدونم که در آینده احتمالا میخوام امکان کامنت گذاری برای کاربران بزارم حالا یعنی باید بیام جدول را برای این کار لحاظ کنم ولی در حال حاضر از آن استفاده نکنم نا موقعی که خواسنم؟ و یا اصلا من کلا فکرش را نمیکردم که در آینده بخوام این امکان را اضافه کنم ولی حالا بنا به درخواست های زیاد مثلا میخوام در این مورد چه کنم( کلا یکم توضیح بدین ممنون میشوم).
5-در موزد تست کردن هم حتما بیشتر توضیح بدید(روند تست و چگونه انجام دادن آن)
6- یه پیشنهاد هم(درخواست) دارم که اگر زحمت نیست کل سوال های دوستان چه ایمیلی چه کامنت و چه تلفنی را اگه بتونین لیست کنید و در یک جلسه اونهایی که البته مفید و نکته دار هستند را مطرح کنید و پاسخ دهید که همه فیض ببرند.ممنونم
با آرزوی سعادتمندی برای شما

لقمان آوند

سلام
پسوند بکاپ ها sql هست و بکاپ گیری و ایمپورت رو گفتیم از طریق phpmyadmin .
منظور از آینده نگری بیشتر طراحی اصولی هست . اگه بد طراحی کنید اضافه کردن امکانات جدید در آینده سخت میشه . صرفا نیازی نیست جدولشو از قبل بسازید !
با انواع و اقسام کوئری های مختلف که توی برنامه تون هست داده ها و خروجی ها رو تست کنید . نوع داده ها و … رو هم همینطور .
جمع کردن درخواست ها یکم سخته ولی اگر امکانش فراهم شد اینکارو می کنیم .

آرمین replyپاسخ

سلام آقای آوند من یک دیتابیس برای یک وبلاگ رو ساختم که عکسشو براتون این زیر گزاشتم خواستم ازتون خواهش کنم ببینید درست انجام دادم یا نه و اگه براتون زحمت نمیشه برام اونو اصلاح کنید و بهم بدید ممنونم .
آدرس تصویر : http://upload7.ir/imgs/2014-12/46655021800095597656.jpg
یه خواهش دیگه هم داشتم اگه میشه چندتا تمرین برای ساخت دیتابیس بهم بدین تا برای خودم بسازم یکم دستم جلو بیفته

لقمان آوند

سلام
طراحی دیتابیس برای وبلاگ به قابلیت هایی بستگی داره که شما برای وبلاگتون در نظر گرفتید .
کلیت طراحیتون خوبه و به نظر میرسه یه وبلاگ خیلی ساده میخواید بنویسید .
همونطور که در دوره گفتم عبارت database design for weblog رو در گوگل سرچ کنید و تصاویر رو ببینید. کلی طرح خوب هست که می تونید ازش ایده بگیرید.

آرمین replyپاسخ

آقای آوند اون کاری رو که گفتین کردم و یه طرح خیلی خوب پیدا کردم ولی یه مشکلی هست اونم اینه که نمیتونم روابط بین جداول رو متوجه بشم اگه بزرگی کنید و برام رابطه ها رو روی عکس زیر بنویسید ممنون میشم . آدرس تصویر : http://upload7.ir/imgs/2014-12/84633910658588123584.png

لقمان آوند

آره این طرح خوبیه
روابط که تو خود جداول مشخص هستند. هر جا post_id هست یه کلید خاری به id جدول پست هست. برا بقیه هم همینطور …

آرمین

اونو میدونم آقای آوند منظورم روبط بین جدول هاست مثلا : 1 به m یا m به n
تو این طرح فقط | یا || کشیده !

لقمان آوند

اوکی.
همه روابط توی این جدول 1 به n هستند. طرفی که با || علامت خورده 1 هست و طرفی که | و مثلث داره n هست .
مثال : 1 یوزر می تونه n تا کامنت داشته باشه. هر کامنت فقط 1 یوزر داره . (پایین ترین رابطه تو جدول)

آرمین replyپاسخ

دستتون درد نکنه ممنونم .

امین ارجمند replyپاسخ

سلام
استاد دلیل اینکه ما میام توی دیتابیس هم foreign key ها رو تعریف میکنیم چیه؟ یعنی منظورم اینه که آیا اگه foreign key ها رو ما توی دیتابیس تعریف نکنیم و رابطه ای ایجاد نکنیم بین جداول مشکلی پیش میاد ؟ در برنامه نویسیمون کاربردی دارن؟ چون چند تا دیتابیس رو دیدم هیچ Foreign key و رابطه ای رو بین جداولشون نبود

لقمان آوند

سلام
بله می تونید بدون کلید خارجی هم کار کنید. منتهی کلید خارجی که میسازید خودش سمت دیتابیس یه سری موارد رو چک می کنه. مثلا اگه cat_id که در جدول پست استفاده می کنید در جدول category وجود نداشته باشه کنرل میشه و انجام نمیشه …
اگر استفاده نکنید این موارد رو باید سمت php خودتون کنترل کنید و حواستون جمع باشه.

حسن محمدزاده replyپاسخ

سلام استاد، عید مبارک.
میخوام دیتابیس رو ترکیبی از relational and hierarchical بزارم.
میخوام یه دسته بندی بر اساس نوع محصولات باشه و هر کدوم از عناصر فیلد محصولات خودش به یه جدول کامل وصل باشه که در ادامه محصول مورد نظر رو بر اساس تاریخ مورد نظر به ما معرفی کنه.
میخوام برای جستجو استفاده کنم.
جست جو بر اساس تاریخ.
باید دسته بندی هام تو mySQL چطوری باشه؟ میشه از هرمی هم استفاده کرد؟

لقمان آوند

سلام
اون حالت سلسله مراتبی که گفتم در ساختار dbms ها بود و نه جداول شما …
تو mySQL فقط جداول ساده و ارتباطات بین اونها رو دارید . باید با کمی تجربه و تمرین طرح های مختلف رو تو همین جدول ها در بیارید .
من دقیقا متوجه نشدم چی می خواید . واضحتر توضیح بدید که بگم دیتابیستونو چطور طراحی کنید .

Massud Tarekhi replyپاسخ

با سلام
استاد در روابط جدول ها فرق دایره بزرگ و کوچک چی هست ؟؟

لقمان آوند

دقیقا کدوم ها منظورت هست . اگه می تونی تو یه تصویر بهم نشون بده .

Massud Tarekhi

http://s6.uplod.ir/i/00583/yg4w811f9h8q.png

لقمان آوند

دایره بزرگ در سمتی هست که فارین کی تعریف کردی و دایره کوچیک به ایندکسی وصله که اون فارین کی بهش اشاره میکنه.

Massud Tarekhi replyپاسخ

با سلام
استاد فرق بین utf8_bin و utf8_general_ci چی هست؟

لقمان آوند

سلام
پاسخ های داده شده در اینجا رو بخون متوجه میشی .

Massud Tarekhi

متوجه نشدم

لقمان آوند

با من تماس بگیرید بهتون توضیح بدم.

Massud Tarekhi replyپاسخ

با سلام
استاد type هر ستون رو که boolean میزارم tinyint با ظرفیت یک رقم میشه
دلیل این چیه

لقمان آوند

درسته
این دوتا معادل هستند و فقط 1 رقم رو میتونند ذخیره کنند که میتونه 0 یا 1 باشه !

Massud Tarekhi replyپاسخ

با سلام
استاد من نفهمیدم ایندکس دقیقا چی هست؟

لقمان آوند

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

Mehdi Mashayekhi replyپاسخ

سلام استاد ایا لازم هست هم برای جدول هم پایگاه داده و هم فیلدها utf8 رو ست کنیم؟؟؟

لقمان آوند

خیر، colation ی که برای خود فیلد انتخاب می کنید کافیه و اولویتش بیشتره .

Mehdi Mashayekhi

خوب اون که مشخصه منظور من این بود که با قرار دادن پایگاه داده بازم نیاز هست برای جداول و یا فیلد ها ابنکار انجام بشه ؟

لقمان آوند

این مورد رو تست کنید . الان دقیقا حضور ذهن ندارم!
یه کولیشن utf8 فقط برای دیتابیس بزارید. بعد تو فیلدهای جداولش فارسی بنویسید و استفاده کنید ببینید درست ذخیره و بازیابی میشن یا نه!
در عین حال بهتره کولیشن پیشفرض رو همون لاتین بزارید و فقط برای فیلدهای مورد نیاز utf8 بزارید …

darin replyپاسخ

باسلام خدمت استاد گرامی
آقای آوند من یک سوال برام پیش امده:
اگه یک دیتایس را طراحی کنیم و آن را پیاده سازی کنیم و یکی یا چند تا از جداول دیتابیس شامل کلید خارجی باشد،
ربط داده کلید های خارجی به فیلد اصلیشون چه مزیتی دارد؟ منظورم این است که تفاوت اینکه فیلد های خارجی را با فیلد اصلی ربط داد یا اینکه فقط فیلد خارجی را تعریف کنیم و دیگر ربط ندهیم چه تفاوتی دارد؟
آیا با ربط دادن یک کلید خارجی از طریق designer یا … mysql داده بصورت اتوماتیک در فیل خارجی ثبت میکند یاباعث بالا رفتن سرعت جستجو میشود یا …
این ارتباطی که می دهیم چه کاری انجام میدهد دارد؟

لقمان آوند

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

sadaf replyپاسخ

سلام
من وقتی وارد php my admin میشم و میخوام بانک بسازم این ارور رو میده
http://uupload.ir/files/eroy_phpadmin.png

لقمان آوند

شما باید با یوزر root لاگین بشید که بتونید جدول بسازید .

فرهاد replyپاسخ

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

لقمان آوند

پیشنهاد اینه که در مورد مفاهیم پایگاه داده مطالعه بیشتری داشته باشید و قبل از طراحی erd ، نمونه های مشابه رو هم پیدا کنید و ازشون ایده بگیرید و طرح خودتون رو تکمیل کنید .

سیروان replyپاسخ

سلام
استاد واسه من پی اچ پی ما ادمین پسورد میخواد پسوردش چی هست؟باید عضو شم؟؟؟؟
http://rozup.ir/view/1563003/5-23-2016%2012-10-38%20AM.png
ولی واسه شما تو ویدیو نمیخواد
من انقدر رویه دکمه go کلیک میکنم که خودش وارد میشه
ولی یه مشکلی هست شما وقتی میرید رو دیتابستون اینو میاره
http://rozup.ir/view/1563005/5-23-2016%2012-13-15%20AM.png
ولی واسه من اینو نمیاره اینو میاره چیکار کنم استاد؟؟؟
http://rozup.ir/view/1563004/5-23-2016%2012-12-59%20AM.png

استاد کمک کنید لطفا زود

لقمان آوند

سلام
یوزر رو root و پسورد رو خالی بزارید و وارد شید.

سیروان replyپاسخ

استاد کمک 😥
یه تاپیک ارسال کردم تو انجمن
بخشphp
عناونش (مشکل بزرگ ومپ سرور )

لقمان آوند

با یه فیلتر شکن از سایت اصلی دانلود کنید مشکلی نیست …

سیروان

استاد خسته شدم خسته
مغزم از بین رفت یک ماه شب و روز نشستم این مشکلو حل کنم اما نتونستم تو انجمن سایت های دیگه گفتم از هزار نفر پرسیدم کسی جواب نمیده حتی بهشون گفتم پول میدم اما بازم جوابی نگرفتم
عصابم خراب شده 😡
دارم بیخیال یادگیری اینترنت میشم
اه
😡 😡 😡 😡 😡 😡 😡

لطفا ج.اب بدید
شما تو پکیج php ومپ سرور رو گزاشتید وقتی که نصبش میکنم میبینم نس خه .phpmyadmin
4.0.4
هست ولی مال شما تو ویدیود 4.2.1 هست .
من الان رفتم که این نسخه رو دانلود کنم و جاگزاری کنم با نسخه جدید اما نمیدونم چطورییییی لطفا بهم آموزش بدید انقدر سعی کردم دارم دیونه میشم

قبل از اون دو هفته ای به خاطر این خواستم برم ومپ سرورم رو نسخه جدید و دانلود کنمو فیلتر شکن کردم و دانلود کردم و وقتی که نصب کردم با چند ارور مواجه شدم در نسخه قبل که اصلا نتونستم حلش کنم
http://i.stack.imgur.com/kZkAO.png
🙄 🙄 🙄 🙄 🙄 🙄

تمام این دردسر برای حل کردن مشکل دیزاینر phpmyadmin است که تو انجمن گفتم

لقمان آوند

سلام
پیشنهاد می کنم آخرین نسخه ومپ سرور متناسب با ویندوزتون رو نصب کنید (32 یا 64 بیتی بودن رو دقت کنید)
بعد از نصب اگر مشکلی بود بگید که بررسی کنیم برای رفعش

سیروان

دانلود کردم این ارورو میده
http://www.steptoinstall.com/wp-content/uploads/2013/12/Step-to-Install-wamp-shows-error-MSVCR100.dll-is-missing-when-install.png

لقمان آوند

از اینجا فایل مربوطه رو دانلود کنید و در پوشه C:/windows/system32 بزارید .

جواد اشکش replyپاسخ

سلام
استاد چرا از زمپ سرور استفاده نکردید در اموزشها در حالی کههم راحتتره وهم نصب بدون ایراد میشه؟
و اینکه php storm اخرین ورژن رو از کجا دانلود کنم؟

لقمان آوند

سلام
شما با هر کدوم راحتترید کار کنید.
از soft98 معمولا آخرین ورژنش گیر میاد

فائزه لشکری replyپاسخ

سلام استاد
من یهو به سرم زد پسوورد مای ادمین رو عوض کنم حالا ک عوض کردم اومدم بیرون دوباره میخوام برم داخل نه با پسوورد جدید نه با پسوورد خالی نمیاره…چیکارش کنم؟ 😥 😥 😥

لقمان آوند

حذف کنید و مجددا از اول نصب کنید.

Classic replyپاسخ

سلام خدمت استاد گرامی
استاد من زمانی که میخوام وارد phpmyadmin بشم ازم نام کاربری و رمز میخواد
چه کنم؟ 🙄

وحید صالحی

نام کاربری رو root و کلمه عبور رو خالی بزارید

dariosh babaii replyپاسخ

با تشکر اقای اوند در فصل 28 مشکل بنده را گفته بودید مشکل از کم حواسی بنده بود می بخشید

فائزه لشکری replyپاسخ

سلام استاد
ورژن phpmyadmin من 4.6.4 هست…در این جلسه 15 که شما از قسمت relation view کلید های خارجی رو ربط میدادید برای من اصلا این دکمه رو نداره…از کدوم قسمت باید اینکارو بکنم؟

لقمان آوند

جدول هاتون رو از نوع innoDB بسازید نباید مشکلی باشه.

آسیه جعفری replyپاسخ

سلام استاد خسته نباشید من دیتابیس این جلسه رو export کردم حالا بدون کوچکترین تغییری میخوام import کنم انجام میشه ولی وقتی دوباره بخوام همونی که خودم import کردم رو export کنم ارور بهم میده در واقع هر فایلی که خودم import کنم رو وقتی میخوام export کنم ارور میده

کیوان علی محمدی

سلام چه خطایی نشون میده؟

آسیه جعفری replyپاسخ

میگه جدول categories نمیتونه بیش از دو کلید اصلی داشته باشه در صورتی که نداره واسه هر جدول دیگه ای هم که باشه باز هم میگه اون جدول نمیتونه چندین کلید اصلی داشته باشه

بهرام replyپاسخ

سلام استاد خسته نباشید
مشغول پیاده سازی یک مینی پروژه حسابداری شخصی و کوچیک هستم. احتیاج به ذخیره تاریخ ها در mysql دارم. طبق تحقیقی که کردم مناسب ترین و راحت ترین روش ذخیره تاریخ از این نظر که بشه به راحتی به شمسی تبدیلش کرد و همینطور داخل کوئری ها ازش استفاده کرد و پردازش روش انجام داد timestamp هست. ولی ظاهرا محدودیتی که داره تا سال 2037 رو بیشتر نمیشه داخلش وارد کرد. یعنی به خاطر ساختار 32 و محدودیت در ذخیره اعداد تا 2037 بیشتر داخلش جا نمیشه. میخواستم بدونم جایگزین timestamp چی هست؟ و آیا روش یا روش های بهتری برای دخیره سازی تاریخ در mysql وجود داره؟ منظورم از تاریخ، تاریخ شمسی هست و اینکه احتیاج به پردازش روی داده تاریخ داریم.
ممنون

لقمان آوند

سلام
جایگزینش DATETIME هست. این نوع رو انتخاب کنید …

بهرام replyپاسخ

سلام
برای مقادیر مثل جنسیت یا مثلا نوع تراکنش های حساب که یا برداشت هست یا واریز. در دیتابیس از چه نوع داده ای استفاده کنیم بهتر هست؟

لقمان آوند

برای جنسیت یا حالت هایی که فقط دو نوعه می تونی یه BIT بزاری که یه رقم هست. مثلا 0 مونث و 1 مذکر. اینجوری از لحاظ مموری بهینه است.

فرزانه replyپاسخ

سلام استاد
من کدهایی که گفته بودید رو کپی کردم اما فایلی که برای شما توی پوشه example موجود هست برای من نیست!
فایل create_table.sql رو من توی پوشه خودم ندارم که لور کنم و بتونم دسترسی داشته باشم به جدول های دیزاینر!!
پیشنهاد شما چیه استاد ؟

ارسال نظرات

کاربر گرامی، امکان ارسال نظر و پشتیبانی برای دوره های مجازی فقط برای دانشجویان این دوره امکان پذیر می باشد.