جدول کتابها :
تغییرات : ویرایش خصوصیت فیلد Bname به یک کلید بی همتا (Unique Key) --- تعریف یک Constraint جهت وارد نکردن مقدار صفر به عنوان ورودی به فیلد
AvailableNumber
تعریف یک Constraint جهت اینکه تاریخ تالیف کتاب قبل از تاریخ فعلی باشد

   کد:



USE [Library]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Books](
      [BookID] [int] NOT NULL,
      [bname] [nvarchar](50) COLLATE Arabic_CI_AS NOT NULL,
      [Author] [nvarchar](50) COLLATE Arabic_CI_AS NOT NULL,
      [CategoryID] [int] NULL,
      [Reportdate] [datetime] NULL,
      [availableNumber] [int] NULL,
PRIMARY KEY CLUSTERED
(
      [BookID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY],
CONSTRAINT [IX_Books] UNIQUE NONCLUSTERED
(
      [bname] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
USE [Library]
GO
ALTER TABLE [dbo].[Books]  WITH CHECK ADD  CONSTRAINT [FK_Books_Categories] FOREIGN KEY([CategoryID])
REFERENCES [dbo].[Categories] ([CategoryID])
GO
ALTER TABLE [dbo].[Books]  WITH CHECK ADD  CONSTRAINT [CK_Books] CHECK  (([AvailableNumber]<>(0)))
GO
ALTER TABLE [dbo].[Books]  WITH CHECK ADD  CONSTRAINT [CK_Books_1] CHECK  (([ReportDate]



جدول طبقه ها :
تغییرات : ویرایش خصوصیت فیلد CategoryName به کلید بی همتا (Unique Key)

   کد:



USE [Library]
GO
/****** Object:  Table [dbo].[Categories]    Script Date: 09/12/2007 23:40:26 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Categories](
      [CategoryID] [int] NOT NULL,
      [CategoryName] [nvarchar](50) COLLATE Arabic_CI_AS NOT NULL,
CONSTRAINT [PK_Categories] PRIMARY KEY CLUSTERED
(
      [CategoryID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY],
CONSTRAINT [IX_Categories_1] UNIQUE NONCLUSTERED
(
      [CategoryName] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
USE [Library]
GO
ALTER TABLE [dbo].[Categories]  WITH CHECK ADD  CONSTRAINT [FK_Categories_Categories] FOREIGN KEY([CategoryName])
REFERENCES [dbo].[Categories] ([CategoryName])



جدول اعضا :
تغییرات : تعریف یک constraint برای چک کردن اینکه تاریخ عضویت حتما قبل از تاریخ اتمام عضویت باشد.تغییر نوع فیلد TEL از Int به Varchar(15)

   کد:



USE [Library]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Members](
      [MemberID] [int] NOT NULL,
      [FirstName] [nvarchar](50) COLLATE Arabic_CI_AS NOT NULL,
      [LastName] [nvarchar](50) COLLATE Arabic_CI_AS NOT NULL,
      [Tel] [varchar](15) COLLATE Arabic_CI_AS NULL,
      [Address] [nvarchar](50) COLLATE Arabic_CI_AS NULL,
      [Membershipdate] [datetime] NOT NULL,
      [EXPDate] [datetime] NULL,
CONSTRAINT [PK__Members__014935CB] PRIMARY KEY CLUSTERED
(
      [MemberID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF
GO
USE [Library]
GO
ALTER TABLE [dbo].[Members]  WITH CHECK ADD  CONSTRAINT [CK_Members] CHECK  (([ExpDate]>[MemberShipDate]))



جدول امانات :
تغییرات :
تعریف یک فیلد جدید به نام TrustID که خصوصیت Identity اونو فعال کردم
تعریف یک Constraint جهت چک کردن تاریخ زمان برگشت با تاریخ به امانت بردن کتاب به طوری که تاریخ برگشت زودتر از تاریخ امانت کتاب نباشد.
برداشتن خصوصت AllowNulls از فیلدهای MemberID و BookID

   کد:



USE [Library]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Trusts](
      [TrustID] [int] IDENTITY(1,1) NOT NULL,
      [MemberID] [int] NOT NULL,
      [BookID] [int] NOT NULL,
      [trustdate] [datetime] NOT NULL,
      [ReturnDate] [datetime] NULL,
CONSTRAINT [PK_Trusts] PRIMARY KEY CLUSTERED
(
      [TrustID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
USE [Library]
GO
ALTER TABLE [dbo].[Trusts]  WITH CHECK ADD  CONSTRAINT [FK__Trusts__BookID__0425A276] FOREIGN KEY([BookID])
REFERENCES [dbo].[Books] ([BookID])
GO
ALTER TABLE [dbo].[Trusts]  WITH CHECK ADD  CONSTRAINT [FK__Trusts__MemberID__03317E3D] FOREIGN KEY([MemberID])
REFERENCES [dbo].[Members] ([MemberID])
GO
ALTER TABLE [dbo].[Trusts]  WITH CHECK ADD  CONSTRAINT [CK_Trusts] CHECK  (([ReturnDate]>=[TrustDate]))

 ------------------------------

نمونه جدول كالا

- -----------------
جداول رو بدین صورت تغییر دادم
1-جدول گروه کالا
فیلدها: 1-نام گروه-شماره گروه


2- جدول کالا
فیلدها:نام کالا-شماره کالا-شماره گروه


3-جدول مشتری(توزیع کننده)
فیلدها:نام مشتری-شماره مشتری


4-انبار
فیلدها : نام انبار-شماره انبار


5-موجودی انبار
فیلدها: شماره انبار-شماره کالا-تعداد-افزایش/کاهش تعداد


6-ارزش کالا
فیلدها: فیمت واحد-شماره کالا


7-پرداخت
فیلدها: نقدی-غیرنقدی

 

 

 

 

 

 

تصحيح

 

 

-جدول گروه کالا
فیلدها: 1-نام گروه-کد گروه


2- جدول کالا
فیلدها:نام کالا-کد کالا-کد گروه-کد انبار- قیمت فروش
چون مثلاً صندلی هم میتونه تو انبار 1 باشه و هم تو انبار 2 و همچنین صندلی که تو انبار شماره 1 به فروش میره تاثیری رو صندلیهای که تو انبار 2 هستند ایجاد نمیکنه یا بعلکس برای خریدشون.پس باید اینجا کد انبار رو داشته باشید


3-جدول مشتری(توزیع کننده)
فیلدها:نام مشتری-شماره مشتری- کد مشتری و ...


4-انبار
فیلدها : نام انبار-کد انبار

 

 

 

 

 

تصحيح

 

 

اصلاً برای مقادیری که محاسبه میشن نباید فیلد یا جدولی در نظر گرفت. برای موجودی باید اینکارو بکنید (تعداد خرید کل - تعداد بازگشت از خرید - تعدادفروش کل + تعداد بازگشت از فروش) پس جدولی به اسم موجود انبار نداریم


5-پرداخت
فیلدها: نقدی- غیرنقدی- نقدی/غیرنقدی


6-برای خرید دو تا جدول داریم
6/1- جدول خرید
فیلدها:کد فاکتور-تاریخ فاکتور-کد توزیع کننده

6/2- جدول اقلام خرید
فیلدها: کد اقلام-کد فاکتور (Fk به جدول 6/1 فیلد کد فاکتور)- کد کالا- تعداد خرید-قیمت واحد


7-برای فروش هم مانند خرید عمل کنید از 2 تا جدول


8-جدول بازگشت از خرید
فیلدها:کد بازگشتی(میتونه Auto number باشه)- کد اقلام (Fk به جدول 6/2 فیلد کد اقلام )- تعداد بازگشتی


9-جدول بازگشت از فروش مانند قسمت شماره 8


10-نوع خرید/فروش(از نظر کلی و جزئی بودن)
فیلدها: کد نوع- نام نوع