بخش اول: ورود به جهان قدرتمند PostgreSQL
بخش دوم: جادوی جستجو و کوئری‌نویسی
بخش سوم: بهینه‌سازی و ساختارهای پیشرفته
بخش چهارم: امنیت، پشتیبانی، عملکرد و نگه‌داری
کارگاه‌ها و مثال‌های کاربردی

تفاوت بین Serial، Sequence و Identity


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


۱. Sequence

  • Sequence دستور استاندارد SQL برای تولید دنباله‌های عددی است.
  • با Sequence می‌توان شروع، بازه افزایشی، حداقل و حداکثر، حلقه و سایر پارامترهای دنباله را کنترل کرد.
  • Sequence مستقل از جدول است و می‌توان از آن در چندین جدول یا ستون استفاده کرد.

مثال ایجاد Sequence و استفاده در جدول:

CREATE SEQUENCE user_id_seq
    START WITH 1
    INCREMENT BY 1;

CREATE TABLE users (
    id INT DEFAULT nextval('user_id_seq') PRIMARY KEY,
    name TEXT
);

INSERT INTO users(name) VALUES ('Ali'), ('Sara');

۲. Serial

  • Serial نوع داده‌ای خاص PostgreSQL است که به عنوان یک Shortcut برای Sequence + DEFAULT عمل می‌کند.
  • هنگام تعریف ستون SERIAL، PostgreSQL به صورت خودکار یک Sequence ایجاد کرده و ستون را به آن متصل می‌کند.
  • نکته مهم: SERIAL استاندارد SQL نیست اما در اکوسیستم PostgreSQL بسیار رایج است.

مثال:

CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT
);

INSERT INTO products(name) VALUES ('Laptop'), ('Mouse');

۳. Identity

  • Identity نوع داده استاندارد SQL است که امکان تولید عدد خودکار را فراهم می‌کند. اگر نیاز به تنظیمات ویژه برای دنباله نداریم و می خواهیم روش استانداردی برای تعریف اعداد افزایشی داشته باشیم، می توانیم از Identity استفاده کنیم. یعنی حالت ساده شده Sequence اما مطابق با استاندارد SQL که اینجا هم پشت صحنه یک دنباله تولید خواهد شد اما هم خوانایی بیشتری دارد و هم استاندارد است.
  • Identity دو حالت دارد:
    1. GENERATED ALWAYS: مقدار ستون همیشه از دنباله تولید می‌شود و نمی‌توان مقدار دلخواه وارد کرد.
    2. GENERATED BY DEFAULT: مقدار پیش‌فرض از دنباله تولید می‌شود، اما در صورت وارد کردن مقدار دلخواه، آن مقدار پذیرفته می‌شود.

مثال:

CREATE TABLE orders (
    id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    customer TEXT,
    amount NUMERIC
);

INSERT INTO orders(customer, amount) VALUES ('Ali', 100);
-- برای GENERATED BY DEFAULT می‌توان مقدار دلخواه وارد کرد:
CREATE TABLE invoices (
    id INT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    total NUMERIC
);

INSERT INTO invoices(id, total) VALUES (500, 1200);  -- مقدار دلخواه پذیرفته شد
INSERT INTO invoices(total) VALUES (1300);          -- مقدار دنباله استفاده شد

جمع‌بندی

مکانیزماستاندارد SQLکنترل دنبالهویژگی‌ها
Sequenceبلهکاملمستقل از جدول، قابل استفاده در چند جدول
SerialخیرمحدودShortcut Sequence + DEFAULT، رایج در PostgreSQL
Identityبلهکاملستون استاندارد SQL، حالت ALWAYS یا BY DEFAULT، کنترل کامل دنباله

نکته:

  • Sequence پایه‌ای‌ترین روش است و بیشترین انعطاف را دارد.
  • Serial برای ساده‌سازی استفاده می‌شود.
  • Identity بهترین گزینه برای استانداردسازی و کنترل دقیق ستون‌های افزایشی است.
فروشگاه
جستجو
دوره ها

لطفا کلمات کلیدی را وارد کنید