الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

قاعدة بيانات استعارة

بدأه ريان1407 في 4 نوفمبر 2012 · 5 رد · 1,092 مشاهدة · في قواعد بيانات Microsoft SQL Server
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ...

انا مبتديء جدا في استخدام sql server واحاول بناء قاعده بيانات مصغره لنظام الاستعارة

لم أرغب بالسؤال الا بعد المحاوله الجادة لبناء القاعده والحمدلله نفذت الجداول والعلاقات واتمنى أن تكون صحيحة سوف ادرجها في المرفقات

واجهت صعوبه في تحديد مدة الاستعارة وكمية الكتب لكل عضو حسب نوع عضويته حيث ان هناك عضويتان عادية و ذهبية صاحب العضوية العادية يحصل على اسبوعين استعارة و5 كتب و صاحب العضويه الذهبية يحصل على 3 اسابيع استعارة و 10 كتب .

استخدمت هذا الكود للتحقق من عدد الكتب التي بحوزة اصاحب العضوية الذهبية (special)! لكن انا على اقتناع تماما انه خطأ وذلك لاني لم اعرف كيف احدد عضو معين لحساب كم عدد الكتب التي في حوزته ولكن كمحاولة !

declare @count int
set @count = 0
while (@count <= 10) and membership_type='special'
begin
insert into borrowing values (8,399201,'2012-11-03');
insert into borrowing values (9,209479,'2012-10-05');
insert into borrowing values (10,540993,'2012-11-01');
end
GO

وخطرت لي فكرة عند انشاء جدول الاستعارة الذي يحتوي رقم العضو و رقم الكتاب و تاريخ الاستعارة استخدام check لعدم تكرار رقم العضوالذي يحمل عضوية العادية لاكثر من 5 مرات والذي يحمل العضوية الذهبية لاكثر من عشر مرات ! ولكن لم استطيع تنفيذه !

كيف يمكن التأكد من ذلك أن كل عضو لم يستعير اكثر مما هو محدد ! واذا استعار اكثر مما هو مقيد به لا يتم قبول اضافة اي سجل جديد له !

كذلك عند حساب وقت ارجاع الكتب استخدمت هذا الكود الذي عمل صحيحا

UPDATE returning
SET returning.#copy_no = borrowing.#copy_no,returning.#member_id = borrowing.#member_id,returning.borrowing_date=borrowing.borrowing_date,
returning_date = DATEADD (week,3,borrowing.borrowing_date) FROM borrowing,member 
WHERE returning.#returning_no = borrowing.#borrowing_no and member.#membership_no = '1' ;

UPDATE returning
SET returning.#copy_no = borrowing.#copy_no,returning.#member_id = borrowing.#member_id,returning.borrowing_date=borrowing.borrowing_date,
returning_date = DATEADD (week,2,borrowing.borrowing_date) FROM borrowing,member 
WHERE returning.#returning_no = borrowing.#borrowing_no and member.#membership_no = '2' ;

ولكن تظهر لي هذه الرساله (0 row(s) affected) !!

سوف ادرج الكود في المرفقات حتى تتضح الرؤية ..

أتمنى ان لا تبخلوا بتوجيهاتكم أخواني ..

قد يكون ما اسأل عنه سهل ممتنع ولكن كما قلت لكم بأن هذه اول محاوله لي للعمل على sql server ..

db.txt

تم تعديل هذه المشاركة بواسطة ريان1407 في 4 نوفمبر 2012 في 21:51

#2

تعديلات ستساعدك في حل المشكله

1-delete table returning
2-add column returning_date to table borrowing
3-add column returning_date_Actual to table borrowing
4-add column No_Of_Book to table membership	(5 to ordinary and 10 to special)
5-add column No_Of_Day to table membership	(15 to ordinary and 21 to special)
6-add column Copy_code to table copies  (No of Copy)
7-add column Vol_code to table copies  (No of Folder)
8-remove all '#' from name of table's or column's

تم تعديل هذه المشاركة بواسطة KARIMSOFT في 5 نوفمبر 2012 في 02:27

1
#3

شكرا استاذي الفاضل على لفت انتباهي لبعض الاشياء الجميله

تم تغيير ما قد اشرت اليه بردك السابق ولكن لم افهم المقصود من اضافة حقل copy_code حيث اني استخدم حقل مشابه الا وهو copy_no ..

عن تطبيق الشرط ( أن الشخص لا يتجاوز عدد كتب معين حسب عضويته ) يتم ادراج الحقل بعد التأكد عملت هذا الكود

while No_Of_Book<10 and membership_type = 'special'
begin 
update  borrowing 
................................... ???
end
go

في مكان النقاط لما اعرف ماذا اكتب ! لان الى الان لم استطيع تحديد عضو معين لاختبار الكتب التي في حوزته !!

طبقت هذا الكود على معرفه تاريخ الاعاده

UPDATE borrowing
SET returning_date = DATEADD (week,3,borrowing.borrowing_date) FROM borrowing,membership 
WHERE membership.membership_type = 'special' ;

UPDATE borrowing
SET returning_date = DATEADD (week,2,borrowing.borrowing_date) FROM borrowing,member 
WHERE membership.membership_type = 'ordinary' ;

ارفقتها بعد التعديل ..

db.txt

تم تعديل هذه المشاركة بواسطة ريان1407 في 5 نوفمبر 2012 في 13:46

#4

انشاء هذا الجدول

create table borrowing(
borrowing_no int identity (1,1),
copy_no int REFERENCES copies (copy_no),
member_id varchar(6) DEFAULT '' NOT NULL REFERENCES member(member_id),
borrowing_date date DEFAULT '' NOT NULL,
returning_date date null,
returning_date_actual date null,
PRIMARY KEY (borrowing_no)
)

حاولت تعبئته بهذة الحقول ولكن لم افلح ! برساله الخطا هذة Column name or number of supplied values does not match table definition.

insert into borrowing values (2,399201,'2012-11-03');
insert into borrowing values (1,209479,'2012-10-05');
insert into borrowing values (5,209479,'2012-11-01');
insert into borrowing values (7,355579,'2012-10-14');
insert into borrowing values (6,540993,'2012-09-30');
insert into borrowing values (3,672019,'2012-10-19');
insert into borrowing values (4,672019,'2012-10-10');


UPDATE borrowing
SET returning_date = DATEADD (week,3,borrowing.borrowing_date) FROM borrowing,membership
WHERE membership.membership_type = 1 ;

UPDATE borrowing
SET returning_date = DATEADD (week,2,borrowing.borrowing_date) FROM borrowing,membership 
WHERE membership.membership_type = 'ordinary' ;

ما المشكله اخواني ؟

#5

كذلك استخدمت هذه الاكواد ولكن من خلال تواضع معرفتي التي لا تزيد عن اسبوع ونصف في الsql اشعر بانها لو توفي الغرض من اختبار عدد الكتب المستعاره لكل عضو !

SELECT member_id, 
 COUNT(borrowing.borrowing_no) AS BookNum
 FROM borrowing, member
GROUP BY member_id
HAVING ( COUNT(borrowing_no) <= 10 and member.membership_no = 1);

SELECT member_id, 
 COUNT(borrowing.borrowing_no) AS BookNum
 FROM borrowing, member
GROUP BY member_id
HAVING ( COUNT(borrowing_no) <= 5 and member.membership_no = 2);

ما ارغب بوضعه هو كالتالي /

كل عضو له العضوية special لا يسمح له باكثر من 10 كتب بالاستعاره الواحد والارجاع يكون بغد 3 اسابيع من تاريخ الاستعارة وكل يوم بعد الاستعاره يبدأ حساب الرسوم المقدرة ب$50. لكل يوم !

كل عضو له العضوية ordinary لا يسمح له باكثر من 5 كتب بالاستعاره الواحد والارجاع يكون بغد 2 اسابيع من تاريخ الاستعارة وكل يوم بعد الاستعاره يبدأ حساب الرسوم المقدرة ب$50. لكل يوم !

تم تعديل هذه المشاركة بواسطة ريان1407 في 5 نوفمبر 2012 في 14:08

#6

copy_code it's No for copy book not SN for table like 5/2 it's main backup 5 from folder/group 2 u can search in internet what is this in labrary system's

declare @MemberId int=399201
declare @borrowing_date datetime='2012-11-03'
declare @returning_date datetime
declare @No_Of_Book int
declare @No_of_day int
declare @No_Of_Book_borrowing int
-------------------------------------
SELECT   
	  @No_Of_Book=dbo.membership.No_Of_Book, 
	@No_of_day=dbo.membership.No_of_day
FROM         dbo.membership INNER JOIN
                      dbo.member ON dbo.membership.membership_no = dbo.member.membership_no
WHERE     (dbo.member.member_id = @MemberId)
-------------
SELECT     @No_Of_Book_borrowing=COUNT(borrowing_no) 
FROM         dbo.borrowing
WHERE     (member_id = @MemberId) AND (returning_date_actual IS NULL)
-------------
set @returning_date =@borrowing_date + @No_of_day
-------------------------------------
SELECT   @No_Of_Book, @No_of_day,@No_Of_Book_borrowing,@borrowing_date ,@returning_date 
-------------------------------------
while @No_Of_Book_borrowing<@No_Of_Book
begin 
insert into borrowing (copy_no, member_id, borrowing_date,returning_date) values (2,@MemberId ,@borrowing_date,@returning_date);
END

to add some field to table borrowing see this code

insert into borrowing (copy_no, member_id, borrowing_date) values (2,399201,'2012-11-03');
insert into borrowing (copy_no, member_id, borrowing_date) values (1,209479,'2012-10-05');
insert into borrowing (copy_no, member_id, borrowing_date) values (5,209479,'2012-11-01');
insert into borrowing (copy_no, member_id, borrowing_date) values (7,355579,'2012-10-14');
insert into borrowing (copy_no, member_id, borrowing_date) values (6,540993,'2012-09-30');
insert into borrowing (copy_no, member_id, borrowing_date) values (3,672019,'2012-10-19');
insert into borrowing (copy_no, member_id, borrowing_date) values (4,672019,'2012-10-10');
1

مواضيع مشابهة