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

هل هذا الربط بين الجدولين عن طريق one to many صحيحة

بدأه Farhad Karim في 6 فبراير 2013 · 13 رد · 1,569 مشاهدة · في قواعد بيانات MySQL
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

تحية طيبة للجميع

اساتذة لديه جدولين الاول Emplyees و الثانى Courses و قمت بعمل الربط بين الجدولين كما فى الصورة

فاريد استفساركم هل الربط التى قمت بها صحيحة ام لا ؟

 

بحيث قمت بتصميم الجداول كما التالى :

جدول الاول : Employees

EmployeesID INT PRIMARY KEY NOT NULL AUTO_INCREMENT

EmployeesName VARCHAR(50)

 

جدول الثانى : Courses

cid INT PRIMARY KEY NOT NULL AUTO_INCREMENT

cname VARCHAR(45)

emid INT PRIMARY KEY NOT NULL

 

و قمت بربط بين  ( EmployeesID ) و (emid ) عن طريق علاقة one to many

 

ملاحضة : قمت بانشاء الجداول و الربط بين الجداول عن طريق ERR Model

post-222415-0-95965500-1360127693_thumb.

#2

الحقل الذي يكون متعدد Many لا يجوز أن يكون مفتاحي لأنه يحتاج أن يتكرر

أي أن الحقل emid يجب أن تزيل صفة المفتاح عنه

1

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#3

بارك الله فيك استاذى العزيز ان شاء الله موفق

لكن استاذى العزيز عندما اقوم بازال مفتاح من حقل emid سوف تصبح الربط Non Identifying Relationship كما فى الصورة التالية :

ملاحضة : لكن استاذى العزيز عندما قمت بربط الجدولين بالطريقة السابقة لا توجد مشكلة فى تكرار فى حقل emid بحيث يمكن ادخال بيانات مكررة فى emid بدون مشكلة

post-222415-0-31690100-1360144834_thumb.

تم تعديل هذه المشاركة بواسطة Farhad Karim في 6 فبراير 2013 في 13:03

#4

أخي أنا لم أعمل على البرنامج الذي تعمل عليه

وأنا جربت ضمن SQL Server Manegement Studio

 

وحينما أقوم بتحويل الحقل إلى مفتاحي يقوم بتحويل العلاقة من واحد إلى واحد

أما إذا أزلت صفة المفتاح فيعيد تحويلها من واحد إلى متعدد

لأنه معروف أن الحقل المفتاحي لا يجوز أن يتكرر ولهذا توجد خاصية التستلسل التلقائي لتجنب أخطاء المستخدم

 

كما بالإمكان استخدام الفتاح المركب كوجود جدول فيه اسم و العائلة ومن الممكن ان يتكرر الاسم وكذلك من الممكن أن تتكرر العائلة ولكن تريد منع تكرار الشخص بنفس الاسم والعائلة معا

فتقوم بجعل الحقلين مع بعضهما مفتاح فيسمح بتكرار القيم ما عدا تكرارهما معا

ما أقبـح المعصية ، تذهب لذتها ويبقى إثمها ... ومأ أحسن الطاعة ، تذهب مشقتها ويبقى ثوابها

كل نعيم دون الجنة غرور ... وكـل شقـاء دون النـار سرور

الدورة التطبيقية لتعليم التصميم بالإليستريتور

#5

تصميمك الأول صحيح، الـsql المولد أعتقد أنه من كتابتك فـmysql workbench لاتولد مثله. الفرق في الأوّل، الخط الموصول، أنه لن يسمح بوجود حقل لمنهج غير مرتبط بموظف. بينما الثاني، المتقطع، يمكن معه وجود منهج بدون موظف، ولا أظن أن هذا ماتريده.

#6

بارك الله فيكم يا اساتذة ان شاء الله موفقين الله يطول بعمركم

اساتذة ممكن تعطونى كود لربط بين الجدولين one to many فى مثال السابق او ماهى الطريقة الصحيحة لربط بين الجدولين و لكن اريدها ان تكون Identifying Relationship و ليس non Identifying Relationship

تم تعديل هذه المشاركة بواسطة Farhad Karim في 6 فبراير 2013 في 17:30

#7

صمم الجدوال ونسق العلاقات بينهن بماتحب. عند إنتهائك من التصميم توجّه لـ:

File > Export > Forward Engineer SQL CREATE Script ...

وإضغط على Next إلى أن ترى كود الـsql المولد.

تم تعديل هذه المشاركة بواسطة Mr.B في 6 فبراير 2013 في 17:49

#8

تمام استاذى العزيز لكن استاذى الكريم كيفة اتاكد ان الربط بين الجدلين صحيحة ام لا

ملاحضة : استاذى العزيز عند تصميم جدول فى ERR Model و ربط بين الجداول و بعدها عندما اريد تحويلها الى السيرفر تضهر رسالة خطاء بانه لا يمكن وضع 2 مفتاح للحقل

بحيث فى err model يقبل المفتاحين

تم تعديل هذه المشاركة بواسطة Farhad Karim في 6 فبراير 2013 في 19:45

#9

هل متأكّد من أنك تنسخ الـsql المولد؟ لا أظن أنها ستولد كود خطأ. جرّب الملف المرفق، إفتحه بـmysql workbench وصدّر الـsql، يفترض أن تكون مثل:

 

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';


-- -----------------------------------------------------
-- Table `db`.`employee`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `db`.`employee` ;

CREATE  TABLE IF NOT EXISTS `db`.`employee` (
  `employee_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `employee_name` VARCHAR(255) NULL ,
  PRIMARY KEY (`employee_id`) ,
  UNIQUE INDEX `employee_id_UNIQUE` (`employee_id` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `db`.`course`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `db`.`course` ;

CREATE  TABLE IF NOT EXISTS `db`.`course` (
  `course_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `course_name` VARCHAR(255) NOT NULL ,
  `employee_id` INT UNSIGNED NOT NULL ,
  PRIMARY KEY (`course_id`, `employee_id`) ,
  UNIQUE INDEX `employee_id_UNIQUE` (`course_id` ASC) ,
  INDEX `fk_course_employee_idx` (`employee_id` ASC) ,
  CONSTRAINT `fk_course_employee`
    FOREIGN KEY (`employee_id` )
    REFERENCES `db`.`employee` (`employee_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

جربته ولم يظهر لي شيء خطأ.

scheme.zip

تم تعديل هذه المشاركة بواسطة Mr.B في 6 فبراير 2013 في 20:05

#10

الله يطول بعمرك استاذى العزيز ان شاء الله دائما موفق

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

 

post-222415-0-96088700-1360170870_thumb.

#11

الرسالة تقول أن قاعدة البيانات غير موجودة، أنشئها:

 

CREATE DATABASE db;
#12

تمام استاذى العزيز ان شاء الله دائما موفق

لكن استاذى العزيز هل الطريقة ربط بين الجدولين صحيحة

اذا امكن ان تقوم بعملية الربط بين الجدولين السابقين بحيث تكون الطريقة سليمة حتى ان شاء الله  بعون الله ثم بتعاونك اقوم باستخدامها دائما فى تصميم اى برنامج اخر

اى ( تكون الطريقة ربط بين الجدولين صحيحة مئة بالمئة )

و اعذنى استاذى و اخى العزيز على كثرة الاسئلة الله يطول بعمرك امين امين

#13

ربط الجدول برأي سليم، يمكن لمدرس أن يدرس أكثر من منهج (واحد لمتعدد 1:n)، لايمكن أن يكون هناك منهج بدون مدرس (identifying relationship).

 

حياك الله أخي.

#14

الله يطول بعمرك استاذى العزيز ان شاء الله موفق بارك الله فيك الف شكر اخى و استاذى العزيز

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…