📚 فصل ۱۱ — طراحی جداول (Table Design) در SQL Server

""

1️⃣ مقدمه — چرا طراحی جدول مهم است؟

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

  • سرعت جستجو چطور باشد.
  • نگهداری داده راحت باشد یا نه.
  • توسعه آینده پروژه بدون مشکل باشد.

مثال یک طراحی بد:

اگر در یک جدول تمام اطلاعات کاربران، سفارش‌ها و محصولات در کنار هم ذخیره شود:

  • داده‌ها تکراری می‌شوند.
  • به‌روزرسانی سخت می‌شود.
  • تغییر یک مقدار ممکن است صدها ردیف را تحت‌تأثیر قرار دهد.

📌 بنابراین، طراحی جدول درست یعنی:

  1. انتخاب تعداد جدول‌های مناسب
  2. تعیین ستون‌ها با Data Type درست
  3. مشخص کردن کلیدها (Keys)
  4. تعریف روابط بین جداول

2️⃣ اجزای اصلی یک جدول

یک جدول معمولاً شامل بخش‌های زیر است:

جزءتوضیح
نام جدول (Table Name)باید معنادار و شفاف باشد (مثلاً Customers به‌جای Tbl1)
ستون‌ها (Columns)هر ستون نشان‌دهنده یک ویژگی داده است (مثلاً FirstName, LastName)
نوع داده (Data Type)تعیین می‌کند هر ستون چه نوع اطلاعاتی نگه دارد (عدد، متن، تاریخ و غیره)
کلید اصلی (Primary Key)برای شناسایی یکتای هر رکورد
قیود (Constraints)قوانین اعتبارسنجی داده (مثلاً NOT NULL, CHECK, DEFAULT)

3️⃣ انواع کلیدها در طراحی جدول

3.1 کلید اصلی (Primary Key)

  • تضمین می‌کند هر ردیف شناسه یکتا داشته باشد.
  • نمی‌تواند NULL باشد.
  • فقط یک Primary Key در هر جدول وجود دارد.

مثال:

CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    FullName NVARCHAR(100) NOT NULL
);

3.2 کلید خارجی (Foreign Key)

  • برای ایجاد ارتباط بین دو جدول.
  • مقدار آن باید در جدول دیگر وجود داشته باشد.

مثال:

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT FOREIGN KEY REFERENCES Customers(CustomerID)
);

3.3 کلید یکتا (Unique Key)

  • تضمین می‌کند مقادیر ستون یا ستون‌ها تکراری نباشند.
  • بر خلاف Primary Key، می‌تواند NULL داشته باشد.

مثال:

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    NationalCode CHAR(10) UNIQUE
);

3.4 کلید مرکب (Composite Key)

  • ترکیب بیش از یک ستون به‌عنوان کلید اصلی.
  • کاربرد در جدول‌های ارتباطی.

مثال:

CREATE TABLE StudentCourses (
    StudentID INT,
    CourseID INT,
    PRIMARY KEY (StudentID, CourseID)
);

4️⃣ روابط بین جداول

4.1 One-to-One (یک به یک)

هر رکورد از جدول A فقط مقابل یک رکورد در جدول B است.
مثلاً:

  • Users
  • UserProfiles

4.2 One-to-Many (یک به چند)

هر رکورد از جدول A می‌تواند چند رکورد در جدول B داشته باشد.
مثلاً:

  • یک مشتری چند سفارش دارد.

4.3 Many-to-Many (چند به چند)

هر رکورد در جدول A می‌تواند با چند رکورد در جدول B مرتبط باشد و برعکس.
میان‌جدول واسط ایجاد می‌کنیم.


5️⃣ نرمال‌سازی (Normalization) — جلوگیری از داده تکراری

5.1 سطح اول (1NF)

  • هر ستون فقط یک مقدار منفرد دارد.
  • داده تکراری نباشد.

5.2 سطح دوم (2NF)

  • تمام ستون‌های غیراصلی وابسته کامل به Primary Key باشند.

5.3 سطح سوم (3NF)

  • ستون‌ها فقط به کلید اصلی وابسته باشند، نه به ستون‌های دیگر.

📌 به زبان ساده: اطلاعات رو طوری پخش کن که تکرار نشه و وابستگی غیرضروری بین ستون‌ها ایجاد نشه.


6️⃣ ایجاد جدول با روش گرافیکی در SSMS

  1. در Object Explorer روی پوشه Tables راست کلیک → New Table…
  2. ستون‌ها را اضافه کن:
  • Name
  • Data Type
  • Allow Nulls
  1. کلید اصلی را تعیین کن → راست کلیک روی ستون → Set Primary Key
  2. جدول را ذخیره کن → نام بده.

7️⃣ ایجاد جدول با T-SQL (CREATE TABLE)

مثال:

CREATE TABLE Products (
    ProductID INT IDENTITY(1,1) PRIMARY KEY,
    ProductName NVARCHAR(200) NOT NULL,
    Price DECIMAL(10,2) CHECK (Price >= 0),
    Stock INT DEFAULT 0,
    CategoryID INT FOREIGN KEY REFERENCES Categories(CategoryID)
);

📌 توضیحات:

  • IDENTITY(1,1) → مقدار خودکار از 1 شروع و 1 تا 1 اضافه می‌شود.
  • CHECK → جلوگیری از ورود مقدار منفی برای قیمت.
  • DEFAULT → مقدار پیش‌فرض در صورت وارد نکردن مقدار.

8️⃣ ویرایش جدول (ALTER TABLE)

اضافه کردن ستون:

ALTER TABLE Products
ADD Description NVARCHAR(MAX);

تغییر نوع داده:

ALTER TABLE Products
ALTER COLUMN ProductName NVARCHAR(300) NOT NULL;

حذف ستون:

ALTER TABLE Products
DROP COLUMN Description;

9️⃣ حذف جدول (DROP TABLE)

DROP TABLE IF EXISTS Products;

🔟 تمرین عملی — طراحی جداول فروشگاهی

جداول:

  1. Customers → اطلاعات مشتریان
  2. Products → محصولات
  3. Orders → سفارش‌ها
  4. OrderDetails → جزئیات هر سفارش

نمونه کد:

CREATE TABLE Customers (
    CustomerID INT IDENTITY PRIMARY KEY,
    FullName NVARCHAR(100) NOT NULL,
    Phone CHAR(11) UNIQUE,
    RegisterDate DATE DEFAULT GETDATE()
);

CREATE TABLE Products (
    ProductID INT IDENTITY PRIMARY KEY,
    ProductName NVARCHAR(200) NOT NULL,
    Price DECIMAL(10,2) CHECK (Price >= 0),
    Stock INT DEFAULT 0
);

CREATE TABLE Orders (
    OrderID INT IDENTITY PRIMARY KEY,
    CustomerID INT FOREIGN KEY REFERENCES Customers(CustomerID),
    OrderDate DATETIME DEFAULT GETDATE()
);

CREATE TABLE OrderDetails (
    OrderID INT,
    ProductID INT,
    Quantity INT CHECK (Quantity > 0),
    PRIMARY KEY (OrderID, ProductID),
    FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
    FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);

1️⃣1️⃣ اشتباهات رایج در طراحی جدول

  1. استفاده از NVARCHAR(MAX) یا TEXT بدون دلیل.
  2. نداشتن Primary Key.
  3. ذخیره تاریخ و عدد به‌عنوان متن.
  4. عدم تعریف روابط Foreign Key.
  5. ستون‌های اضافی و تکراری.

1️⃣2️⃣ جمع‌بندی

  • طراحی جدول بخش حیاتی پایگاه داده است.
  • باید Data Type درست، کلید مناسب، و رابطه دقیق انتخاب شود.
  • نرمال‌سازی کمک می‌کند داده‌ها تکرار نشود.
  • هم روش گرافیکی SSMS و هم T-SQL برای طراحی وجود دارد.
  • رعایت استانداردها = نگهداری راحت‌تر + عملکرد بهتر.
محمد وب‌سایت

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *