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

اتصال PHP به دیتابیس؛ مرحلهای ساده اما سرنوشتساز
برای ساخت هر جدول، اول باید PHP بتواند با دیتابیس حرف بزند. این ارتباط یا با MySQLi برقرار میشود یا PDO. تفاوتشان زیاد نیست اما PDO به شما آزادی بیشتری میدهد، مخصوصاً وقتی نمیدانید پروژه در آینده به چه سمتی میرود یا ممکن است روی دیتابیس دیگری اجرا شود.
نمونه اتصال با MySQLi
<?php
$connection = new mysqli("localhost", "root", "", "mydb");
if ($connection->connect_error) {
die("خطا در اتصال: " . $connection->connect_error);
}
?>
نمونه اتصال با PDO
<?php
try {
$db = new PDO("mysql:host=localhost;dbname=mydb", "root", "");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo "اتصال برقرار نشد. " . $e->getMessage();
}
?>
ساخت جدول در MySQL؛ چیزی فراتر از یک Query ساده
معمولاً برای ساخت جدول فقط یک دستور SQL نوشته میشود، اما اگر کمی دقیقتر نگاه کنیم انتخاب نوع داده، اندازه ستونها، و حتی اسم ستونها در آینده پروژه تاثیر زیادی میگذارد . برای همین توصیه میشود حتی اگر جدول ساده است باز هم با حوصله طراحی شود.
مثال با MySQLi!!!
<?php
$sql = "CREATE TABLE users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY
fullname VARCHAR(50) NOT NULL
email VARCHAR(100)
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";
if ($connection->query($sql) === TRUE) {
echo 'جدول users ساخته شد.';
} else {
echo 'خطا در ساخت جدول. ' . $connection->error;
}
?>
مثال با PDO!!!
<?php
try {
$query = "CREATE TABLE products (
id SERIAL PRIMARY KEY
title VARCHAR(100) NOT NULL
price INT
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)";
$db->exec($query);
echo 'جدول products ایجاد شد.';
} catch (PDOException $e) {
echo 'خطا. ' . $e->getMessage();
}
?>
ساخت جدول در PostgreSQL؛ تفاوتها و نکات ریز
اگر پروژه شما با PostgreSQL کار میکند، باز هم روند تقریبا مشابهی را طی میکنید. تنها نکته این است که PostgreSQL بعضی از نوع دادهها را کمی متفاوت مدیریت میکند. مثلاً SERIAL در PostgreSQL بسیار راحتتر از AUTO_INCREMENT در MySQL عمل میکند.
مثال PostgreSQL!!!
<?php
try {
$pg = new PDO("pgsql:host=localhost;dbname=testdb", "postgres", "password");
$pg->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "CREATE TABLE customers (
id SERIAL PRIMARY KEY
name VARCHAR(100) NOT NULL
city VARCHAR(50)
)";
$pg->exec($sql);
echo 'جدول customers ساخته شد.';
} catch (PDOException $e) {
echo 'خطا. ' . $e->getMessage();
}
?>
چند نکته که در عمل بسیار کمک میکنند
اینها نکاتی هستند که بیشتر برنامهنویسها بعد از چند سال تجربه به آنها میرسند:
- هر جدول باید یک کلید اصلی داشته باشد. نبودن آن در آینده دردسر درست میکند.
- نام ستونها را تا حد ممکن واضح انتخاب کنید. ستونی که بعداً در یک Query پیچیده استفاده میشود باید معنیدار باشد.
- نوع داده اشتباه انتخاب کنید، بعداً تمام بخشهای پروژه دچار مشکل میشوند.
- اگر پروژه در حال رشد است از همان اول PDO انتخاب کنید تا تغییر دیتابیس به مشکلی تبدیل نشود.
- Queryهای مربوط به ایجاد جدول را وسط صفحه اصلی سایت قرار ندهید. بهتر است در یک فایل جدا باشد.
- ورودیهایی که به Query میرسند باید بررسی شوند. خیلی وقتها مشکل امنیتی دقیقاً از همین نقطه شروع میشود .
اشتباهاتی که معمولاً دیده میشود
بیش از نیمی از مشکلات دیتابیس به خاطر همین چند مورد است:
- جدول بدون PRIMARY KEY
- تعریف VARCHAR با اندازههای غیر استاندارد
- استفاده از نامگذاری نامفهوم
- ایجاد جدول بدون توجه به روابط آینده
- عدم کنترل خطا در زمان ایجاد یا اتصال
این خطاها ساده به نظر میرسند، اما وقتی پروژه کمی بزرگتر شود، رفعشان زمان زیادی میگیرد.
نتیجهگیری
ساخت جدول در PHP قرار نیست کار پیچیدهای باشد، اما اگر همین مرحله ساده را اصولی انجام دهید، در ادامه کارهای توسعه راحتتر و تمیزتر پیش میرود. چه با MySQL کار کنید چه PostgreSQL تفاوت اصلی در نوع اتصال و چند نوع داده محدود است. بقیه مراحل تقریباً مشابهاند. مهمتر از همه این است که بدانید چرا یک ستون باید اندازه خاصی داشته باشد و چرا کلید اصلی باید درست تعریف شود .
اگر این اصول را رعایت کنید، پایه دیتابیس پروژه شما محکمتر میشود و در آینده نه خودتان به مشکل میخورید و نه تیمی که قرار است پروژه را توسعه دهد.