اذهب إلى المحتوى
  • 0

كيفية عمل علاقة بين جدولين one to many في sql

Samar Lulu2

السؤال

كيفية انشاء شرط الcheck في الsql في حالة أنه لدينا الزائر يمكن أن يحجز أكثر من غرفة في الفندق و الغرفة يمكن حجزها مرة واحدة لليوم 

تم التعديل في بواسطة شرف الدين2
توضيح العنوان
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0
  • يمكن فهم العلاقة أنه لدينا جدول الزوار guest وجدول الغرف Rooms والعلاقة بينهم نسقطها في جدول الحجوزات reservations مثلا.. 
  • حيث لدينا في reservations  كل من: رقم الزائر و رقم الغرفة وتاريخ الحجز.
  • عندما نريد عمل استعلام للتأكد أن الغرفة شاغرة في يوم ما، نبحث في جدول الحجوزات عن رقم الغرفة و تاريخ اليوم المطلوب حجزها فيه، 
  • يمكن عد ناتج الاستعلام، وفي حال أعاد قيمة 0 هذا يعني أن الغرفة شاغرة، وإن أعاد 1 يعني محجوزة 
  • طبعاً 1 كافية لأن حجز الغرفة يتم مرة في اليوم،
  • لا يهمنا من قام بالحجز حالياً..
SELECT COUNT(1)
FROM reservations 
WHERE room_id = 123 AND reservations_day = '2021-12-25';

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

بما أن النزيل يمكنه حجز العديد من الغرف ولكن على الجانب الأخر لا يمكن للغرفة أن يتم حجزها من قِبل أكثر من نزيل فهذا يعني أن يوجد علاقة واحد إلى كثير (one-to-many) بين النزيل والغرفة 

لتحقيق تلك العلاقة يمكننا ببساطة أن نجعل جدول الغرفة يحتوي على الid الخاص بالنزيل كforeign key مما يؤدي للسماح بوجود أكثر من صف في جدول الغرف يحتوي كلًا منهم على المُعرف الخاص بالنزيل وبالتالي يتم إعتبارهم مملوكين لنفس النزيل

ويمكنك فهم الموضوع أيضًا عبر قراءة المقالة التالية 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ منذ ساعة مضت قال Wael Aljamal:
  • يمكن فهم العلاقة أنه لدينا جدول الزوار guest وجدول الغرف Rooms والعلاقة بينهم نسقطها في جدول الحجوزات reservations مثلا.. 
  • حيث لدينا في reservations  كل من: رقم الزائر و رقم الغرفة وتاريخ الحجز.
  • عندما نريد عمل استعلام للتأكد أن الغرفة شاغرة في يوم ما، نبحث في جدول الحجوزات عن رقم الغرفة و تاريخ اليوم المطلوب حجزها فيه، 
  • يمكن عد ناتج الاستعلام، وفي حال أعاد قيمة 0 هذا يعني أن الغرفة شاغرة، وإن أعاد 1 يعني محجوزة 
  • طبعاً 1 كافية لأن حجز الغرفة يتم مرة في اليوم،
  • لا يهمنا من قام بالحجز حالياً..

SELECT COUNT(1)
FROM reservations 
WHERE room_id = 123 AND reservations_day = '2021-12-25';

 

هل يمكن كتابة جملة الcheck عند كتابة الsql بهذه الطريقة ؟ :

CHECK (room.guest_ssn = guest_ssn )

بتاريخ منذ ساعة مضت قال شرف الدين2:

بما أن النزيل يمكنه حجز العديد من الغرف ولكن على الجانب الأخر لا يمكن للغرفة أن يتم حجزها من قِبل أكثر من نزيل فهذا يعني أن يوجد علاقة واحد إلى كثير (one-to-many) بين النزيل والغرفة 

لتحقيق تلك العلاقة يمكننا ببساطة أن نجعل جدول الغرفة يحتوي على الid الخاص بالنزيل كforeign key مما يؤدي للسماح بوجود أكثر من صف في جدول الغرف يحتوي كلًا منهم على المُعرف الخاص بالنزيل وبالتالي يتم إعتبارهم مملوكين لنفس النزيل

ويمكنك فهم الموضوع أيضًا عبر قراءة المقالة التالية 

 

هل يمكن كتابة جملة الcheck عند كتابة الsql بهذه الطريقة ؟ :

CHECK (room.guest_ssn = guest_ssn )

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 17 دقائق مضت قال سمر طاهر:

هل يمكن كتابة جملة الcheck عند كتابة الsql بهذه الطريقة ؟ :

تستخدم CHECK مثل قيد على الجدول، وليس استعلام SQL هي تحدد مجال قيمة عدد ما

ALTER TABLE Persons
ADD CHECK (Age>=18);

المثال السابق يفرض تخزين قيمة أكبر أو تساوي 18 في جدول الأشخاص.

CREATE TABLE Persons (
.	...
    Age int,
    CHECK (Age>=18)
);

قيد على العمر

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 17 دقائق مضت قال سمر طاهر:

هل يمكن كتابة جملة الcheck عند كتابة الsql بهذه الطريقة ؟ :

CHECK (room.guest_ssn = guest_ssn )

هل يمكن كتابة جملة الcheck عند كتابة الsql بهذه الطريقة ؟ :

CHECK (room.guest_ssn = guest_ssn )

ﻻ حاجة لكتابة جملة check يكفي فقط تحديد الroom.guest_ssn ك foreign key حتى نضمن وجود نزيل بهذا المُعرف

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال شرف الدين2:

ﻻ حاجة لكتابة جملة check يكفي فقط تحديد الroom.guest_ssn ك foreign key حتى نضمن وجود نزيل بهذا المُعرف

جيد ولكن كيف سنضع شرط لجعل أن الغرفة لا يتم حجزها الا لنزيل واحد في وقت معين

أنا لهذا وضعت جملة الشرط بأن يكون ال room.guest_ssn يساوي الguest_ssn كي يجعل الغرفة يأخذها نزيل واحد هل هذا صحيح؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ الآن قال سمر طاهر:

جيد ولكن كيف سنضع شرط لجعل أن الغرفة لا يتم حجزها الا لنزيل واحد في وقت معين

أنا لهذا وضعت جملة الشرط بأن يكون ال room.guest_ssn يساوي الguest_ssn كي يجعل الغرفة يأخذها نزيل واحد هل هذا صحيح؟

بما أن لا وجود للغرفة إلا في جدول "الغرفة" ولا يمكن تكرار المُعرف الخاص بالغرفة فبالتالي لن يظهر المُعرف الخاص بها أكثر من مرة مما يعني أن لا يمكن حجزها أكثر من مرة

على عكس النزيل الذي يظهر المُعرف الخاص به أكثر من مرة على هيئة foreign_key في جدول الغرف مما يعني إ/كانية حجزه لعدد من الغرف

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 36 دقائق مضت قال سمر طاهر:

هل يمكن كتابة جملة الcheck عند كتابة الsql بهذه الطريقة ؟ :

ممكن عمل unique للثنائية room_id,  reservations_day

ALTER TABLE reservation
ADD CONSTRAINT Room_reservation_check UNIQUE(room_id , reservations_day)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 1 ساعة قال شرف الدين2:

بما أن لا وجود للغرفة إلا في جدول "الغرفة" ولا يمكن تكرار المُعرف الخاص بالغرفة فبالتالي لن يظهر المُعرف الخاص بها أكثر من مرة مما يعني أن لا يمكن حجزها أكثر من مرة

على عكس النزيل الذي يظهر المُعرف الخاص به أكثر من مرة على هيئة foreign_key في جدول الغرف مما يعني إ/كانية حجزه لعدد من الغرف

اذًا هذه الجملة لا تحتاج لشرط check صحيح؟

بتاريخ منذ ساعة مضت قال Wael Aljamal:

ممكن عمل unique للثنائية room_id,  reservations_day


ALTER TABLE reservation
ADD CONSTRAINT Room_reservation_check UNIQUE(room_id , reservations_day)

 

تمام شكرًا لك فكرة رائعة 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...