### مستندات پروژه پایگاه داده سیستم مدیریت انتشارات
#### ۱. معرفی پروژه
**عنوان پروژه:** سیستم مدیریت انتشارات
**توضیح:** این پروژه برای مدیریت کارهای یک انتشارات شامل مدیریت کتابها، نویسندگان، سفارشات، مشتریان، و موجودی کتابها طراحی شده است. هدف اصلی این سیستم، بهبود فرآیندهای نشر، پیگیری فروش کتابها، و سازماندهی اطلاعات نویسندگان و مشتریان است.
#### ۲. شرح جداول پایگاه داده
##### جدول کتابها (`Books`)
- **توضیح:** این جدول شامل اطلاعات مربوط به کتابهای موجود در انتشارات است.
- **فیلدها:**
- **BookID:** شناسه منحصر به فرد برای هر کتاب (کلید اصلی).
- **Title:** عنوان کتاب.
- **ISBN:** شماره استاندارد بینالمللی کتاب.
- **PublicationDate:** تاریخ انتشار کتاب.
- **Publisher:** نام انتشارات.
- **Price:** قیمت کتاب.
- **StockQuantity:** تعداد موجودی کتاب.
##### جدول نویسندگان (`Authors`)
- **توضیح:** این جدول شامل اطلاعات نویسندگانی است که با انتشارات همکاری میکنند.
- **فیلدها:**
- **AuthorID:** شناسه منحصر به فرد برای هر نویسنده (کلید اصلی).
- **FirstName:** نام نویسنده.
- **LastName:** نام خانوادگی نویسنده.
- **Biography:** بیوگرافی کوتاه نویسنده.
- **Email:** آدرس ایمیل نویسنده.
##### جدول نویسندگان کتابها (`BookAuthors`)
- **توضیح:** این جدول ارتباط بین کتابها و نویسندگان را نگهداری میکند و مشخص میکند که هر کتاب توسط کدام نویسنده یا نویسندگان نوشته شده است.
- **فیلدها:**
- **BookAuthorID:** شناسه منحصر به فرد برای هر رابطه (کلید اصلی).
- **BookID:** شناسه کتاب (کلید خارجی که به جدول `Books` متصل است).
- **AuthorID:** شناسه نویسنده (کلید خارجی که به جدول `Authors` متصل است).
##### جدول مشتریان (`Customers`)
- **توضیح:** این جدول شامل اطلاعات مشتریانی است که کتابها را از انتشارات خریداری کردهاند.
- **فیلدها:**
- **CustomerID:** شناسه منحصر به فرد برای هر مشتری (کلید اصلی).
- **FirstName:** نام مشتری.
- **LastName:** نام خانوادگی مشتری.
- **PhoneNumber:** شماره تماس مشتری.
- **Email:** آدرس ایمیل مشتری.
- **Address:** آدرس محل سکونت مشتری.
##### جدول سفارشات (`Orders`)
- **توضیح:** این جدول شامل اطلاعات مربوط به سفارشات ثبت شده توسط مشتریان است.
- **فیلدها:**
- **OrderID:** شناسه منحصر به فرد برای هر سفارش (کلید اصلی).
- **CustomerID:** شناسه مشتری که سفارش را ثبت کرده است (کلید خارجی که به جدول `Customers` متصل است).
- **OrderDate:** تاریخ ثبت سفارش.
- **TotalAmount:** مبلغ کل سفارش.
- **ShippingAddress:** آدرس ارسال سفارش.
- **OrderStatus:** وضعیت سفارش (مثلاً در حال پردازش، ارسالشده، تکمیلشده).
##### جدول جزئیات سفارشات (`OrderDetails`)
- **توضیح:** این جدول اطلاعات جزئیات هر سفارش شامل کتابهای سفارش داده شده و تعداد آنها را ذخیره میکند.
- **فیلدها:**
- **OrderDetailID:** شناسه منحصر به فرد برای هر جزئیات سفارش (کلید اصلی).
- **OrderID:** شناسه سفارشی که جزئیات به آن مربوط است (کلید خارجی که به جدول `Orders` متصل است).
- **BookID:** شناسه کتاب سفارش دادهشده (کلید خارجی که به جدول `Books` متصل است).
- **Quantity:** تعداد کتابهای سفارش دادهشده.
- **UnitPrice:** قیمت واحد کتاب در زمان سفارش.
#### ۳. شرح روابط جداول
- **ارتباط بین جدول کتابها و جدول نویسندگان کتابها:** هر کتاب میتواند توسط چندین نویسنده نوشته شود و هر نویسنده میتواند چندین کتاب نوشته باشد، بنابراین بین این دو جدول یک ارتباط چند به چند (Many-to-Many) برقرار است که توسط جدول `BookAuthors` مدیریت میشود.
- **ارتباط بین جدول مشتریان و جدول سفارشات:** هر مشتری میتواند چندین سفارش داشته باشد، بنابراین بین این دو جدول یک ارتباط یک به چند (One-to-Many) برقرار است.
- **ارتباط بین جدول سفارشات و جدول جزئیات سفارشات:** هر سفارش میتواند شامل چندین کتاب باشد، بنابراین بین این دو جدول نیز یک ارتباط یک به چند (One-to-Many) برقرار است.
- **ارتباط بین جدول کتابها و جدول جزئیات سفارشات:** هر کتاب میتواند در چندین سفارش مختلف وجود داشته باشد، بنابراین بین این دو جدول نیز یک ارتباط یک به چند (One-to-Many) برقرار است.
#### ۴. توضیحات اضافی
- **کلیدهای اصلی:** هر جدول دارای یک کلید اصلی است که بهصورت منحصر به فرد هر رکورد را شناسایی میکند.
- **کلیدهای خارجی:** کلیدهای خارجی برای برقراری ارتباط بین جداول استفاده میشوند. به عنوان مثال، `BookID` در جدول `OrderDetails` به جدول `Books` و `CustomerID` در جدول `Orders` به جدول `Customers` متصل است.
#### ۵. مثالهای استفاده
- **دریافت لیست تمام کتابهای نوشتهشده توسط یک نویسنده خاص:**
- با استفاده از `AuthorID` میتوان لیست کتابهای نوشتهشده توسط آن نویسنده را از طریق جدول `BookAuthors` استخراج کرد.
- **بررسی وضعیت موجودی کتابها:**
- با استفاده از `StockQuantity` در جدول `Books` میتوان موجودی فعلی هر کتاب را بررسی کرد.
- **محاسبه کل درآمد انتشارات از فروش کتابها در یک بازه زمانی مشخص:**
- با جمعبندی `TotalAmount` در جدول `Orders` برای سفارشات ثبتشده در یک بازه زمانی مشخص، میتوان کل درآمد انتشارات را محاسبه کرد.
---
این مستندات ساختار و توضیحات ضروری برای درک و استفاده از پایگاه داده سیستم مدیریت انتشارات را ارائه میدهد و میتواند بهعنوان راهنمایی برای توسعه و بهبود این سیستم مفید باشد.