تخفیف ویژه

ساخت CMS ساده با PHP - قسمت 2 - ساختار دیتابیس و جداول

دسته بندی: آموزش
زمان مطالعه: 4 دقیقه
۰۸ اسفند ۱۳۹۲

به نام خدا و  با سلام خدمت همه دوستان عزیز در سون لرن؛در ادامه ی بحث ساخت CMS ساده با PHP برای این مطلب که قست اول محسوب میشه قصد داریم ساختار دیتابیس و جداول مورد نیاز با فیلد‌های لازم رو بررسی کنیم،همون طور که می‌دونید بحث طراحی دیتابیس مهم‌ترین بخش ایجاد یک پروژه تحت وب هستش،پس باید برای این مسئله اهمین زیادی قائل بشیم.

نکته :

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

فهرست محتوای این مقاله

 ساختار دیتابیس و جداول

در ابتدا یه دیتابیس با نام CMS ایجاد میکنیم و جدول‌های زیر رو به ترتیب ایجاد می‌کنیم.فایل اسکریپت SQL ساخت دیتابیس در انتهای مطلب ضمیمه شده.برای این CMS ساده ما از چهار تا جدول برای مطالب،کاربران،پست‌ها و برگه‌ها استفاده کردیم که ساختارشون به صورن زیر هستش.

جدول posts

این جدول مطالب ما رو در خودش نگه میداره و شامل فیلد‌های زیر هستش.

CREATE TABLE IF NOT EXISTS `posts` (
  `post_ID` bigint(11) NOT NULL AUTO_INCREMENT,
  `post_title` text COLLATE utf8_persian_ci NOT NULL,
  `post_body` longtext COLLATE utf8_persian_ci NOT NULL,
  `post_date` datetime NOT NULL,
  `post_slug` varchar(250) COLLATE utf8_persian_ci NOT NULL,
  `post_status` varchar(20) COLLATE utf8_persian_ci NOT NULL,
  `comment_count` bigint(20) NOT NULL DEFAULT '0',
  PRIMARY KEY (`post_ID`)
)

 

شناسه،عنوان،متن،تاریخ،slug،وضعیت و تعداد نظرات فیلد‌های جدول پست هستن که اطلاعات لازم رو ذخیره میکنن.شناسه به عنوان کلید اصلی ساخته میشه.

جدول comments

از این جدول برای ذخیره نظرات کاربران در مطالب استفاده میکنیم.

CREATE TABLE IF NOT EXISTS `comments` (
  `comment_ID` int(11) NOT NULL AUTO_INCREMENT,
  `comment_post_ID` bigint(11) NOT NULL,
  `comment_user_id` bigint(11) NOT NULL,
  `comment_author` text COLLATE utf8_persian_ci NOT NULL,
  `comment_author_email` varchar(100) COLLATE utf8_persian_ci DEFAULT NULL,
  `comment_author_url` varchar(100) COLLATE utf8_persian_ci DEFAULT NULL,
  `comment_body` text COLLATE utf8_persian_ci NOT NULL,
  `comment_date` datetime NOT NULL,
  `parent_id` bigint(11) DEFAULT NULL,
  `comment_approved` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`comment_ID`),
  KEY `comment_user_id` (`comment_user_id`)
)

 

خوب این جدول شامل شناسه،آیدی پست مربوطه (آیدی پستی که نظر براش ثبت شده)،آیدی کاربری که نظر رو ثبت کرده (اگه کاربر لاگین نباشه براش عدد صفر رو ثبت می‌کنیم یعنی مهمان بوده)،نام نظر دهنده،ایمیل نظر دهنده،آدرس وب سایت نظر دهنده،متن نظر،تاریخ ارسال نظر،شناسه والد (این شناسه والد برایاینه که کاربران بتونن به نظرات دیگه پاسخ بدن)،تایید نظر هستش که ستون شناسه به عنوان کلید اصلی و شناسه کاربر نظر دهنده رو هم به صورت کلید تعریف کردیم که باعث میشه توی کوئری‌ها مون سرعت بیشتری برای انتخاب داشته باشیم.

جدول pages

این جدول ساختارش شبیه به مطالب هستش و دقیقا همون فیلد‌ها براش در نظر گرفته شده و قرار برگه‌ها یا همون صفحات سایت رو در این جا قرار بدیم(برای ساخت منو هم از همین استفاده میکنیم،البته توسعه اون هم در سری‌ها بعدی مورد بحث قرار میگیره)

CREATE TABLE IF NOT EXISTS `pages` (
  `page_ID` bigint(20) NOT NULL AUTO_INCREMENT,
  `page_title` text COLLATE utf8_persian_ci NOT NULL,
  `page_body` longtext COLLATE utf8_persian_ci NOT NULL,
  `page_date` datetime NOT NULL,
  `page_slug` text COLLATE utf8_persian_ci NOT NULL,
  `page_status` varchar(20) COLLATE utf8_persian_ci NOT NULL,
  `comment_count` bigint(20) NOT NULL DEFAULT '0',
  PRIMARY KEY (`page_ID`)
)

خوب فکر نمیکنم توضیح خاصی بخواد چون خودتون می‌بینید که همون ساختار مطالب رو داره.

 جدول users

CREATE TABLE IF NOT EXISTS `users` (
  `user_ID` bigint(11) NOT NULL AUTO_INCREMENT,
  `user_login` varchar(50) COLLATE utf8_persian_ci NOT NULL,
  `user_password` varchar(50) COLLATE utf8_persian_ci NOT NULL,
  `user_email` varchar(100) COLLATE utf8_persian_ci NOT NULL,
  `user_register_date` datetime NOT NULL,
  `user_level` enum('user','admin','','') COLLATE utf8_persian_ci NOT NULL,
  `user_status` tinyint(1) NOT NULL,
  PRIMARY KEY (`user_ID`),
  KEY `user_status` (`user_status`)
)

خوب اینم از جدول کاربران ما که اطلاعات کاربران در اون ذخیره میشه،برای لاگین کردن در سایت و ثبت نام ازش استفاده میشه و شامل فیلد‌های شناسه کاربر،نام کاربری،کلمه عبور(چون برای ذخیره کلمه عبور از الگوریتم‌های رمزنگاری مثل md5 استفاده میکنیم باید طول مناسب براش انتخاب بشه،الگوریتم md5 رشته ای با 32 کاراکتر تولید میکنه پس فیلد کمله عبور حداقل  32 کاراکتر باید طول داشته باشه )، ایمیل کاربر،تاریخ ثبت نام،سطح کاربری (در این آموزش فقط دو سطح کاربری  admin و user ایجاد میشه و بعدا در اموزش‌های بعدی به طور مفصل نحوه ساخت یه سیستم ACL کامل رو قرار میدیم) و وضعیت کاربر هستش.شناسه کاربری به صورت فیلد یکتا و کلید اصلی و وضعیت کاربر هم به صورت کلید تعریف شده تا در اجرای کوئری برای وضعیت کاربر سرعت بیشتری بهمون بده.

خوب دوستان عزیز برای این مطلب ساختار دیتابیس رو معرفی و کمی بررسی کردیم و انشالله در مطلب بعدی میریم سراغ ساختار فایل‌های پروژه و بعدشم شروع به کد نویسی توابع و کدهای لازم.

چه امتیازی به این مقاله می دید؟
نویسنده کیوان علی محمدی
یادگیرنده ی همیشگی،برنامه نویس،نویسنده،عاشق خلق چیزهای عجیب،عاشق تحلیل داده ها، مسئول بخش فنی و هم بنیان گذار در سون لرن.

نظرات کاربران

احسان مرادی

سلام . من تازه شروع کردم به یاد گیری این آموزش وقتی دیتابیس رو میسازم مشکلی به وجود نمیاد فقط این ارور رو دریافت میکنم
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\wamp64\www\CMS\inc\db.php on line 3

از PDO هم که استفاده میکنم در کد های دیگر فایل ها ارور دریافت میکنم . لطفا راهنمایی کنید .

وحید صالحی

دوست عزیز این دوره منسوخ شده و پشتیبانی نمیشه

amir baragy

استاد
در چه مواقعی از کلمه کلیدی KEY استفاده میکنیم؟
1- KEY `comment_user_id`

آیا key با index فرق میکنه؟

تشکر

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

تفاوتی ندارن دوست عزیز. اینها مترادف هستند

amir baragy

سلام استاد
میشه در مورد این دو تا خط کد یه کم توضیح بدین. و اینکه دلیل این کار چی هست؟

1- /*!40101 SET @[email protected]@COLLATION_CONNECTION */

2- SET time_zone = “+00:00”

کار برد دستور SET چیست و در چه مواقعی (در کجاها ) باید از آن استفاده کرد؟

استاد! منظور از این دو (دش) — چی هست؟ و کارشان چی هست؟ مثل این خط زیر
— Database: `cms_w`

سپاس فراوان

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

دوست عزیز این کدها رو خود mysql برای dump کردن جدول ها ایجاد میکنه و یکسری متغییر ها برای اجرای اسکریپت تعریف میکنه.

علی مهاجرانی فرد

درود من هرکاری میکنم این دیتا بیس اوکی بشو نیست :دی

Notice: Undefined index: admin in D:\xampp\htdocs\CMS\inc\db.php on line 3

Notice: Undefined index: alimoodi4542 in D:\xampp\htdocs\CMS\inc\db.php on line 3

Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in D:\xampp\htdocs\CMS\inc\db.php on line 3

خانه

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in D:\xampp\htdocs\CMS\inc\functions.php on line 137

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in D:\xampp\htdocs\CMS\index.php on line 34
اخرین مطالب

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in D:\xampp\htdocs\CMS\index.php on line 61

بعد فایل های استایل دهی رو از کجا باید چک کنیم ؟

http://mohajeranifard.ir/php/

یکی واسم رفع خطا کرد دیتا بیس رو اما کلا انگاری استایل نداره از کجا باید نگاه کنم استایل هارو و مسیرهاشو

علی

وقتی می خوام فایل sql که قرار دادین برای دانلود رو در database قرار بدم (import کنم) این error رو میده.

Error

SQL query:


— Database: `cms`

CREATE DATABASE IF NOT EXISTS `cms` DEFAULT CHARACTER SET utf8 COLLATE utf8_persian_ci;

MySQL said: Documentation
#1044 – Access denied for user ‘p30hosti’@’localhost’ to database ‘cms’

باید چی کار کنم ؟

وحید صالحی

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

REZATAKRO

pdf نداره چرا ؟

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

باید داشته باشه.

mehdi563

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

تشکر
راستی، اگه شما برام یه قالب خوب خبری بسازین، هزینه اون چقدر میشه و چند روزه آماده میشه و من تا چند مهلت دارم تا پولشو بدم؟ برای وورد پرس باش.

لقمان آوند

امیدواریم .
متاسفانه بدلیل مشغول بودن پروژه ی کاری نمی پذیرم شخصا .
عذرخواهی می کنم .

mehdi563

سلام خدمت شما دوستان گرامی در سایت سون لرن،
کی می تونین آموزش تصویری به زبان فارسی CMS رو برای ما تو سایت بزارین؟

ممنون میشم.
مهدی

لقمان آوند

آموزش متنیش که در حال حاضر رو سایت هست .
امیدواریم در آینده بتونیم به صورت تصویری هم آماده اش کنیم .

sabzikamal

من sqlserver2008r2کار کردم کار با mysqlخیلی باهم تفاوت دارند؟

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

سلام،از لحاظ نرم افزار و کنسول های مدیریت با هم فرق دارن،ولی از لحاظ زبان SQL زیاد تفاوتی ندارن.

سید علی

سلام
عید شما مبارک باشه
برا ما تازه کارا خیلی مفیده.انشاءالله که به لطف شما ما هم بتونیم یاد بگیریم. ❓

aligh

سلام . سه تا سوال داشتم .
1- تفاوت varchar و char در چیست ؟
2- توی mysql قابلیتی هست که مثلا اگر توی فیلد user یه جدول یه نام وارد کردید ، همون نام توی فیلد user یه جدول دیگه وارد بشه ؟
3- index توی mysql چیکار می کنه ؟

سجاد دریس

سلام.
1. هر دوی اینها برای ذخیره متن استفاده میشه، و تفاوتشون توی اندازه متنی که میتونن ذخیره کنن هستش. char میتونه تا 255 کاراکتر، و varchar میتونه تقریبا تا 65500 کاراکتر رو در خودش ذخیره کنه.
2. این مورد مربوط به ارتباطات فیلد ها و جدول ها یا همون relations هست. با تعریف ارتباط بین فیلد ها میتونید اینکارو انجام بدین.
3. mysql برای هر جدول یک جدول index درختی میسازه تا دسترسی به رکوردها سریعتر بشه. حالا بر حسب فیلدی که index داره اگه جستجو رو انجام بدین سرعت پردازش query شما بیشتر میشه.

نیاز به لاگین

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