آموزش رایگان PHP

آموزش ساخت دیتابیس و جدول برای پروژه PHP طبق استاندارد گوگل

1405/05/04 23:38 محراب حسن زاده
آموزش ساخت دیتابیس و جدول برای پروژه PHP طبق استاندارد گوگل

مقدمه: چرا دیتابیس استاندارد برای پروژه PHP حیاتی است؟

هر پروژه نرم‌افزاری موفق بر پایه یک دیتابیس مهندسی شده و دقیق بنا شده است. عدم رعایت اصول استاندارد در طراحی دیتابیس و جدول‌ها، در آینده منجر به مشکلاتی چون کاهش شدید سرعت لود صفحات، پیچیدگی در نوشتن کوئری‌ها و رخنه‌های امنیتی جدی می‌شود. در این مقاله قصد داریم ساخت دیتابیس و جدول‌ها را با رعایت اصول راهنمای سبک پایگاه داده گوگل (Google's Database Style Guide) و بهینه‌ترین متدهای PHP پیاده‌سازی کنیم.

قوانین طلایی گوگل در طراحی ساختار پایگاه داده

گوگل و بسیاری از شرکت‌های بزرگ فناوری، الگوهای خاصی را برای یکپارچگی داده‌ها دنبال می‌کنند. در ادامه به مهم‌ترینِ این قوانین می‌پردازیم:

  • نام‌گذاری به سبک snake_case: تمام نام‌های جداول، ستون‌ها و دیتابیس‌ها باید با حروف کوچک انگلیسی و با کاراکتر خط زیرین (_) از هم جدا شوند (مانند user_profiles).
  • انتخاب نام جمع برای جداول: نام جداول باید به صورت جمع انتخاب شود (مانند users به جای user).
  • یکتایی کلیدهای اصلی: برای هر جدول یک کلید اصلی عددی خودافزا با نام ساده id و از نوع BIGINT UNSIGNED در نظر بگیرید.
  • استفاده از موتور InnoDB: این موتور به شما امکان استفاده از تراکنش‌ها (Transactions) و کلیدهای خارجی را برای حفظ یکپارچگی داده‌ها می‌دهد.
  • کدگذاری پیش‌فرض utf8mb4: برای پشتیبانی کامل از زبان فارسی و ایموجی‌ها، حتما دیتابیس را با انکودینگ utf8mb4_unicode_ci بسازید.

۱. پیاده‌سازی دیتابیس و جدول استاندارد در MySQL

ابتدا کدهای SQL مربوط به ایجاد دیتابیس و جداول کاربران و نوشته‌ها را بررسی می‌کنیم. توجه کنید که چطور رابطه یک‌به‌چند بین دو جدول برقرار شده است:


CREATE DATABASE IF NOT EXISTS `my_app_db` 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;

USE `my_app_db`;

-- جدول کاربران
CREATE TABLE IF NOT EXISTS `users` (
    `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR(50) NOT NULL UNIQUE,
    `email` VARCHAR(100) NOT NULL UNIQUE,
    `password` VARCHAR(255) NOT NULL,
    `is_active` TINYINT(1) DEFAULT 1,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- جدول نوشته‌ها با کلید خارجی استاندارد
CREATE TABLE IF NOT EXISTS `posts` (
    `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    `user_id` BIGINT UNSIGNED NOT NULL,
    `title` VARCHAR(150) NOT NULL,
    `slug` VARCHAR(150) NOT NULL UNIQUE,
    `content` TEXT NOT NULL,
    `published_at` TIMESTAMP NULL DEFAULT NULL,
    `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

۲. نحوه اتصال و ساخت دیتابیس با PHP به شیوه PDO

در دنیای مدرن PHP، استفاده از افزونه قدیمی mysql_connect کاملاً منسوخ شده و خطرناک است. استاندارد گوگل و فریم‌ورک‌های مدرن استفاده از PDO (PHP Data Objects) را به دلیل امنیت بالا در برابر حملات SQL Injection و انعطاف‌پذیری توصیه می‌کنند. در زیر نحوه اتصال استاندارد و اجرای کوئری را مشاهده می‌کنید:


$host = '127.0.0.1';
$db   = 'my_app_db';
$user = 'root';
$pass = '';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$db;charset=$charset";

$options = [
    PDO::ATTR_ERRMODE            =--> PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
    
    // ساخت یک جدول نمونه به صورت داینامیک
    $sql = "CREATE TABLE IF NOT EXISTS `categories` (
        `id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        `name` VARCHAR(100) NOT NULL UNIQUE,
        `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB;";
    
    $pdo->exec($sql);
    echo "اتصال برقرار شد و جدول با موفقیت ایجاد گردید.";
} catch (\PDOException $e) {
    // نمایش ندادن خطا به صورت مستقیم در سرور پروداکشن برای امنیت بیشتر
    error_log($e->getMessage());
    die("خطا در برقراری ارتباط با پایگاه داده رخ داده است.");
}

نکات مهم امنیت و بهینه‌سازی دیتابیس

برای رعایت کامل استانداردهای گوگل، نکات زیر را در طول توسعه پروژه مدنظر قرار دهید:

  1. Prepared Statements: در کدهای PHP خود هیچ‌گاه متغیرها را مستقیماً داخل کوئری‌های SQL تزریق نکنید. همیشه از prepare() و execute() در PDO استفاده کنید.
  2. استفاده از ایندکس‌ها (Indexes): روی ستون‌هایی که مدام در دستورات WHERE یا JOIN فیلتر می‌شوند (مثل email یا slug) حتماً ایندکس تعریف کنید تا سرعت جستجو بالا برود.
  3. رمزنگاری پسوردها: هرگز گذرواژه‌ها را به صورت متن ساده یا با متدهای قدیمی مانند md5 ذخیره نکنید. در PHP همواره از تابع password_hash() استفاده کنید.

پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

تفاوت PHP با HTML، CSS و JavaScript؛ راهنمای جامع و ساده برای مبتدیان
1405/03/21 01:06

تفاوت PHP با HTML، CSS و JavaScript؛ راهنمای جامع و ساده برای مبتدیان

مطالعه بیشتر
آموزش جامع و کاربردی کار با فایل‌ها در PHP
1405/05/04 23:14

آموزش جامع و کاربردی کار با فایل‌ها در PHP

مطالعه بیشتر
آموزش مدیریت Box Model و ترکیب اجزای آن با CSS: کنترل دقیق فاصله‌ها و ابعاد عناصر
1402/06/05 23:30

آموزش مدیریت Box Model و ترکیب اجزای آن با CSS: کنترل دقیق فاصله‌ها و ابعاد عناصر

مطالعه بیشتر
آموزش Directive‌ های Vue.js | استفاده از v-model، v-bind و v-show با مثال
1404/09/23 21:10

آموزش Directive‌ های Vue.js | استفاده از v-model، v-bind و v-show با مثال

مطالعه بیشتر
آموزش فیلتر کردن داده‌ها در PHP با توابع filter_var و preg_match
1405/05/13 21:29

آموزش فیلتر کردن داده‌ها در PHP با توابع filter_var و preg_match

مطالعه بیشتر
مقدمه‌ای بر CSS و نحوه اضافه کردن آن به HTML: راهنمای ساده و کامل برای مبتدیان
1402/06/04 23:43

مقدمه‌ای بر CSS و نحوه اضافه کردن آن به HTML: راهنمای ساده و کامل برای مبتدیان

مطالعه بیشتر
آموزش جامع مدیریت خطا با Try Catch و Exception در PHP (اصول و استانداردهای تمیز)
1405/05/01 20:26

آموزش جامع مدیریت خطا با Try Catch و Exception در PHP (اصول و استانداردهای تمیز)

مطالعه بیشتر
آموزش جامع Session در PHP به زبان ساده + پروژه عملی شبیه‌ساز
1405/05/01 20:07

آموزش جامع Session در PHP به زبان ساده + پروژه عملی شبیه‌ساز

مطالعه بیشتر
کار با فیلترهای CSS: آموزش استفاده از blur، brightness و contrast برای افکت‌های تصویری جذاب
1403/08/11 21:08

کار با فیلترهای CSS: آموزش استفاده از blur، brightness و contrast برای افکت‌های تصویری جذاب

مطالعه بیشتر
آموزش کامل ویژگی background در CSS: تنظیمات پس‌زمینه برای طراحی وب راهنمای جامع
1402/06/05 23:51

آموزش کامل ویژگی background در CSS: تنظیمات پس‌زمینه برای طراحی وب راهنمای جامع

مطالعه بیشتر
آموزش Responsive Design با استفاده از Media Queries: طراحی واکنش‌گرا برای تمامی دستگاه‌ها
1402/06/10 18:07

آموزش Responsive Design با استفاده از Media Queries: طراحی واکنش‌گرا برای تمامی دستگاه‌ها

مطالعه بیشتر
آموزش جامع تعریف تابع سفارشی در PHP طبق استاندارد گوگل و PSR
1405/04/16 01:07

آموزش جامع تعریف تابع سفارشی در PHP طبق استاندارد گوگل و PSR

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد