H

Notes DBMS: مبانی، ER و سه‌طرحواره، مدل‌های داده و SQL

مقدمه و تعاریف پایه

  • داده (Data): واقعیت‌های خام بدون پردازش، مانند عدد یا نام. به تنهایی معنای خاصی ندارند.
    • مثال: عدد 25 به خودی خود اطلاعاتی دربر ندارد.
  • اطلاعات (Information): داده‌های پردازش‌شده و معنادار که به پرسش‌ها پاسخ می‌دهند.
    • مثال: سن کاربر = 25 سال، یک قطعه اطلاعات است.
  • دانش (Knowledge): تحلیل و درک عمیق اطلاعات برای تصمیم‌گیری و پیش‌بینی با استخراج الگوها.
    • مثال: میانگین سن کاربران 30 سال است.

مبانی اولیه و انگیزه استفاده از DBMS

  • دو رویه طراحی سیستم ذخیره‌سازی:
    • 1) مشی سنتی یا فایلینگ
    • 2) مشی پایگاهی (DBMS)
  • مزایای استفاده از پایگاه داده (DBMS):
    • کاهش افزونگی داده
    • حفظ یکپارچگی داده‌ها و سازگاری
    • اشتراک‌گذاری داده‌ها به سهولت
    • کنترل دقیق امنیت و دسترسی
  • مقایسه بین پایگاه داده و روش فایل‌-مبنای ذخیره‌سازی:
    • فایل-مبنا: داده‌ها در فایل‌های مجزا و مستقل ذخیره می‌شوند؛ هر برنامه منطق خود را پیاده‌سازی می‌کند.
    • DBMS: داده‌ها مجتمع و با واسطه یک سیستم مدیریت پایگاه داده واحد مدیریت می‌شوند.
    • پیام کلیدی: کاهش افزونگی، ایجاد واحد عملیاتی منسجم و افزایش ایمنی

معماری سیستم پایگاه داده و سه‌طرحواره (Three-Schema)

  • سه طرحواره اصلی:
    • طرحواره داخلی (Internal Level): توصیف ساختارهای ذخیره‌سازی فیزیکی و مسیرهای دسترسی (مثلاً ایندکس‌ها).
    • طرحواره مفهومی/ منطقی (Conceptual/ Logical Level): توصیف ساختار پایگاه داده برای کاربران دامنه و مدل داده‌ای مشترک.
    • طرحواره‌های خارجی (External Level): نمایش دیدگاه‌های مختلف کاربران به داده‌ها.
  • هدف سه‌طرحواره:
    • استقلال برنامه-داده (Program-Data Independence): تغییر در سطح فیزیکی بدون تأثیر روی سطح منطقی و خارجی.
    • پشتیبانی از چند دیدگاه از داده‌ها (Multiple Views of Data)
  • Mapping بین سطوح و نقش زبان‌های مختلف DBMS.

زبان‌های DBMS و مفاهیم اصلی

  • زبان تعریف داده‌ها (DDL): برای مشخص‌کردن طرحواره پایگاه داده (CREATE, ALTER, DROP).
  • زبان دستکاری داده‌ها (DML): برای بازیابی و به‌روزرسانی داده‌ها (INSERT, UPDATE, DELETE, SELECT).
  • زبان‌های سطح بالا/ غیرروی (High-Level/Non-procedural): مانند SQL.
  • زبان‌های سطح پایین/رویّه‌ای (Low-Level/Procedural): شامل جنبه‌های رویه‌ای برای پردازش گام‌به‌گام.
  • رابط‌های DBMS: برای تعامل کاربران و برنامه‌ها با DBMS (Embeded, Standalone, JDBC/ODBC و غیره).

مدل‌های داده و سطوح آنها

  • مدل‌های داده به سه دسته تقسیم می‌شوند:
    • مدل مفهومی (Conceptual): سطح بالا، معنایی؛ نزدیک به درک کاربران.
    • مدل منطقی (Logical): جزئیات بیش‌تر از مفهوم، بدون در نظر گرفتن پیاده‌سازی DBMS.
    • مدل فیزیکی (Physical): نمايي از نحوه ذخیره‌سازی در دیسک و پیاده‌سازی داخلی.
  • مدل‌های پیاده‌سازی (Implementation) و مدل‌های شی-رابطی (Object-Relational) نیز وجود دارند.

مدل ER و طراحی مفهومی

  • مفهوم ER شامل:
    • موجودیت‌ها (Entities): اشیا یا چیزهای خاص دنیای واقعی.
    • ویژگی‌ها/ATTRIBUTES: صفات توصیف‌کننده هر موجودیت.
    • کلیدها (Keys): کلید اصلی (PK) که هر موجودیت باید مقدار منحصر به فردی داشته باشد.
    • روابط (Relationships): ارتباط‌های بین موجودیت‌ها با انواعی مانند 1:1، 1:N، N:M.
    • انواع صفات: ساده، مركب، چند مقداری، مشتق، صفات کلیدی، صفات طراحی‌شده (derived).
  • موجودیت‌های قوی و ضعیف:
    • موجودیت قوی: مستقل از سایر موجودیت‌ها.
    • موجودیت ضعیف: وابسته به موجودیت دیگری و شناسه مستقل ندارد.
  • نمودار ER و نمادگذاری:
    • مستطیل: موجودیت
    • بیضی: ویژگی‌ها
    • لوزی: رابطه
    • خطوط زیرین روی ویژگی‌های کلیدی
  • رابطه‌ها و درجات آنها:
    • درجه رابطه (arity) با نشانۀ n، مانند 1-ary, 2-ary, 3-ary.
    • نمونه‌ها: 1:1، 1:N، N:M
  • نمودار ER و مفاهیم پیشرفته:
    • رابطه‌های با درجه بالا از دو یا سه سطح، نقش‌ها و قیود ساختاری
    • نگاهی به مدلِ بهبود‌یافته هستنده-ارتباط (Enhanced ER, EER): زیرکلاس‌ها، ارث‌بری، و قیود جدید
  • مثال‌های عملی:
    • مثال HOTEL: موجودیت‌های Hotel, Room, Reservation, Customer
    • نمونه COMPANY: Departments, Projects, Employees, Dependents؛ رابطه‌هایی مانند Works_On، Manages و غیره

مدل رابطه‌ای و نگاشت ER→Relational

  • مفاهیم پایه مدل رابطه‌ای:
    • داده‌ها در قالب جداول با سطرها و ستون‌ها ذخیره می‌شوند.
    • کلیدهای اصلی (Primary Keys) و خارجی (Foreign Keys) برای تعیین ارتباط‌ها.
    • قیود (Constraints) مانند CHECK، NOT NULL و … برقرار می‌شود.
  • نگاشت از ER به مدل رابطه‌ای:
    • موجودیت‌ها به جداول تبدیل می‌شوند.
    • روابط به کلیدهای خارجی یا جداول رابط تبدیل می‌شوند (بسته به سطح قیود).
  • مثال ساده از ساخت جداول و قیود:
    • مثال شرکت: تبدیل موجودیت‌های EMPLOYEE، DEPARTMENT، PROJECT و DEPENDENT به جداول و تعیین کلیدهای اصلی و خارجی.

طرحواره و وضعیت پایگاه داده

  • طرحواره (Schema): تعریف کلی ساختار پایگاه داده، انواع داده‌ها، و محدودیت‌ها.
  • وضعیت (State/Instance): داده‌های واقعی ذخیره‌شده در یک لحظه زمان.
  • تمایز:
    • Schema به ندرت تغییر می‌کند؛ State تغییر می‌کند.
    • طرحواره (Schema) به لحاظ Инسنسن intension است و حالت (State) به extension.

طراحی مفهومی بهبود یافته و نرمال‌سازی

  • هدف از بهبود مدل ER:
    • حذف افزونگی داده‌ها
    • شفاف‌سازی روابط مبهم (مثلاً تعیین دقیق 1:1 یا N:M و ویژگی‌های رابطه)
    • نرمال‌سازی برای جلوگیری از ناهنجاری‌های درج/حذف/به‌روزرسانی
    • حفظ قیود یکپارچگی (Integrity Constraints)
    • آماده‌سازی برای طراحی منطقی رابطه‌ای
  • اصول n به 1، 1 به n، N به M در روابط
  • زیرکلاس‌ها و ارث‌بری: استفاده از ارث‌دهی برای نگاشت بهتر به جداول و کاهش پیچیدگی

طرحواره‌های DBMS و معماری‌های کلان

  • معماری سه‌طرحواره:
    • External Level (ساده‌ترین دید کاربران): دیدگاه‌های مختلف از داده‌ها
    • Conceptual/Logical Level (سطح منطقی): طرحواره عمومی پایگاه داده
    • Internal Level (سطح فیزیکی): طرحواره ذخیره‌سازی و مسیرهای دسترسی
    • Mapping بین سطح‌ها (External↔Conceptual, Conceptual↔Internal)
  • اهداف معماری سه‌ Schemas:
    • استقلال برنامه-داده
    • پشتیبانی از چند دیدگاه از داده‌ها
    • سه سطح انتزاع برای سازمان‌دهی بهتر

زبان‌ها و رابط‌های DBMS (SQL و فراتر)

  • زبان‌های DBMS:
    • DDL: تعریف Database Schema (CREATE, ALTER, DROP)
    • DML: دستکاری داده‌ها (INSERT, UPDATE, DELETE, SELECT)
    • زبان‌های سطح بالا/غیر رویه‌ای (Non-Procedural): SQL
    • زبان‌های سطح پایین/رویّه‌ای (Procedural): PL/SQL, T-SQL و غیره
  • مثال‌های SQL معرفی‌شده در منابع:
    • ایجاد جدول و محدودیت:
  CREATE TABLE Student (
    StudentID SERIAL PRIMARY KEY,
    Name VARCHAR(100) NOT NULL,
    Major VARCHAR(50)
  );
  • تعریف محدودیت CHECK:
  CREATE TABLE Course (
    CourseID SERIAL PRIMARY KEY,
    Title VARCHAR(200) NOT NULL,
    Credits INT CHECK (Credits > 0)
  );
  • تعریف جدول Enrollment با کلیدهای خارجی و کلید ترکیبی:
  CREATE TABLE Enrollment (
    StudentID INT REFERENCES Student(StudentID),
    CourseID INT REFERENCES Course(CourseID),
    Grade CHAR(2),
    PRIMARY KEY (StudentID, CourseID)
  );
  • DDL و DML به همراه نمونه‌های کاربردی در محیط‌های Embed و Standalone، و رابط‌های JDBC/ODBC

رابط‌های کاربری و محیط‌های توسعه DBMS

  • رابط‌های کاربری مبتنی بر منو/ فرم/ گرافیک برای وب و دسکتاپ
  • رابط‌های برنامه‌نویس برای جاسازی DML در زبان‌های برنامه‌نویسی (Embedded) و استفاده‌های بیرونی (Standalone)
  • رویکردهای دسترسی:
    • Embedded SQL در زبان‌هایی مانند C/C++، Java
    • JDBC برای Java و ODBC برای زبان‌های دیگر
  • ابزارهای DBMS برای مدیریت، طراحی، و مانیتورینگ:
    • ERD tools, Query tools, Schema diff, Backup/Restore, Performance monitoring

معماری‌های کلاينت-سرور و توزیعی

  • معماری متمرکز: همه چیز در یک سیستم با سخت‌افزار و نرم‌افزار متمرکز
  • معماری دو سطح (2-Tier): کلاینت-سرور با لایه کاربری و لایه دیتابیس
  • معماری سه سطح (Three-Tier): Presentation Layer (Web UI)، Business Logic/Application Server، Database Server
  • معماری‌های توزیعی/Distributed DBMS:
    • DDBMS همگن و ناهمگن
    • مدل‌های فدرال و چندپایگاهی
  • مزایا: امنیت بیشتر، مقیاس‌پذیری، پارتیشن‌بندی و مدیریت کلاینت‌های متنوع

انواع مدل‌های داده و تاریخچه آنها

  • مدل‌های داده متنوع تاریخی:
    • مدل سلسله‌ای (Hierarchical)
    • مدل شبکه‌ای (Network)
    • مدل رابطه‌ای (Relational)
    • مدل‌های شی‌گرا (Object-oriented), O/R و NoSQL
  • تبیین ویژگی‌ها و معایب هر مدل:
    • سلسله‌ای: پیمایش سریع، اما محدودیت روابط n-to-many
    • شبکه‌ای: روابط چند-به-چند، اما طراحی مسیرهای پیچیده است
    • رابطه‌ای: ساده، استفاده از SQL، ولی محدودیت‌هایی در نمایش ساختارهای پیچیده
  • مفهوم NoSQL برای داده‌های غیرساخت‌یافته و مقیاس‌پذیری

نمونه‌های ER و نگاشت‌های عملی

  • نمونه ER COMPANY و HOTEL:
    • ENTITYs: DEPARTMENT, PROJECT, EMPLOYEE, DEPENDENT, STUDENT, COURSE, SECTION, GRADE_REPORT
    • روابط: WORKS_ON (EMPLOYEE–PROJECT)، MANAGES (EMPLOYEE–DEPARTMENT)، HAS (مثلاً HOTEL–ROOM)، …
  • نگاشت به مدل مرتبۀ رابطه‌ای و SQL‌های نمونه برای ایجاد جداول و کلیدهای خارجی
  • اصول کلیدی در نگاشت ER→Relational:
    • نمودار ER به صورت جداول با PK و FK، و قیود مرتبط
    • کاربرد constrained keys برای حفظ صحت داده

مفاهیم عملی تکمیلی و نکات آموزشی

  • رابطه‌ها به سه دسته تقسیم می‌شوند: 1:1، 1:N، N:M
  • رابطه‌های سه-موجودیتی (t-uple) و نکات مربوط به وارثیت و ارث‌بری
  • اصول نرمال‌سازی:
    • هدف جلوگیری از افزونگی، حفظ سازگاری و امکان نگهداری آسان
    • مثال: تفکیک موجودیت دانشجو و درس و استفاده از ارتباط ثبت‌نام
  • مفهوم منبع داده: data dictionary (کاتالوگ داده) در DBMS و تفاوت میان داده‌های فعال و غیرفعال
  • نقش CASE و ابزارهای توسعه: IDEهای طراحی پایگاه داده مثل Oracle JDeveloper، JBuilder، و غیره

نکات کلیدی و تمرین‌ها

  • سوالات تمرینی برای ER و طراحی مفهومی بهبود یافته:
    • چگونه یک سیستم ثبت نام دانشگاه را با چند درس و چند استاد مدل می‌کنید؟
    • چگونه از ER به مدل رابطه‌ای نگاشت می‌کنید و چه محدودیت‌هایی ممکن است پیش بیاید؟
  • هدف اصلی از استفاده از سه‌مقام طرحواره چیست؟ استقلال برنامه از داده و چند دیدگاه از داده‌ها.
  • مفاهیم کلیدی در طراحی مفهومی بهبود یافته (EER): هم‌ارثی، نقش‌ها، و زیرکلاسه‌ها.

نکته‌های اخلاقی و عملی

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

مراجع و منابع یادگیری

  • Fundamentals of Database Systems (7th edition) - Elmasri & Navathe (2015)
  • منابع فارسی مرتبط با مفاهیم پایگاه داده و ER و SQL
  • منابع آنلاین مانند W3C School و مستندات DBMS‌های معتبر

پیوست: نمونه‌هایی برای مرور سریع

  • مثال سطحی از طرحواره COMPANY با موجودیت‌های DEPARTMENT، PROJECT، EMPLOYEE و DEPENDENT و روابط WORKSFOR، MANAGES، WORKSON
  • نمونه کد SQL ساده برای ایجاد جداول پایه و کلیدهای خارجی:
    • تعریف دانشجو و درس:
  CREATE TABLE Student (
    StudentID SERIAL PRIMARY KEY,
    Name VARCHAR(100) NOT NULL,
    Major VARCHAR(50)
  );
  • تعریف COURSE و CHECK constraint:
  CREATE TABLE Course (
    CourseID SERIAL PRIMARY KEY,
    Title VARCHAR(200) NOT NULL,
    Credits INT CHECK (Credits > 0)
  );
  • نگارش Enrollment با کلید ترکیبی:
  CREATE TABLE Enrollment (
    StudentID INT REFERENCES Student(StudentID),
    CourseID INT REFERENCES Course(CourseID),
    Grade CHAR(2),
    PRIMARY KEY (StudentID, CourseID)
  );
  • نکته: بین سطح External، Conceptual و Internal mappings چگونه جریان دارد و چه تفاوتی در نمایش داده‌ها ایجاد می‌کند.