رابطه چند به چند در mysql
نویسنده : مینا علی زاده | زمان انتشار : 06 اسفند 1400 ساعت 12:36
جهت انجام پروژه های دانشجویی و یا تمرینهای برنامه نویسی رشته کامپیوتر میتوانید به آی دی تلگرام زیر پیام دهید
@AlirezaSepand
سلام امیر جان، در باره رابطه چند به چند اول توضیح بدم:
فرض کن قصد داری برای یک دانشگاه یه برنامه ثبت نام دانشجو بنویسی، دانشجو وارد میشه و واحد هایی که مد نظرش هست رو انتخاب میکنه، برای مثال ما واحد های زیر رو داریم:
ریاضی
معادلات دیفراسنیل
کامپایلر
ساختمان داده
خوب دانشجو قصد داره واحد های مورد نظرش رو انتخاب کنه، هر دانشجو میتونه چند واحد رو انتخاب کنه، اما واحدهایی که میخواد انتخاب کنه فقط توسط همین دانشجو انتخاب نمیشه، دانشجو های دیگه ای هم هستن که این واحدها و انتخاب میکنن، در حقیقت دانشجو چند واحد رو انتخاب میکنه و هر واحد میتونه توسط چند دانشجو انتخاب بشه، پس ما اینجا رابطه چند به چند داریم، بخواییم تو SQL Server جدول های مورد نیاز رو طراحی کنیم به صورت زیر عمل می کنیم:
اول جدول دانشجو:
CREATE TABLE [Students] ( [Id] INT IDENTITY NOT NULL PRIMARY KEY, [StudentCode] NVARCHAR(10) NOT NULL, [FirstName] NVARCHAR(100) NOT NULL, [LastName] NVARCHAR(100) NOT NULL ); GO
حالا یه جدول باید داشته باشیم برای واحد ها:
CREATE TABLE [Courses] ( [Id] INT IDENTITY NOT NULL PRIMARY KEY, [Name] NVARCHAR(200) NOT NULL );
اگه دقت کنی الان ما هیچ رابطه ای بین دانشجو و واحد نداریم، باید رابطه ایجاد بشه ولی بصورت چند به چند، برای رابطه های چند به چند باید یه جدول دیگه داشته باشیم که فقط شامل فیلدهای کلید جدول هایی هستند که به صورت چند به چند قراره به هم متصل بشن، جدول مورد نظر رو به صورت زیر طراحی می کنیم:
CREATE TABLE [StudentsCourses] ( [StudentId] INT NOT NULL REFERENCES [Students]([Id]), [CourseId] INT NOT NULL REFERENCES [Courses]([Id]), PRIMARY KEY([StudentId],[CourseId]) ); GO
دقت کن، ستون StudentId به جدول Students و ستون CourseId به جدول Courses ارتباط داره، همچنین فیلد هایی که رابطه دارن با جدول ها، با هم به عنوان کلید اولیه یا همون Primary Key در نظر گرفته شدند، با مکانیزم بالا، رابطه چند به چند بین جداول مورد نظر ایجاد میشه.
حالا بریم سراغ Entity Framework، ما در حقیقت الان باید Map مورد نظر رو برای جداول بالا در Entity Framework بنویسیم. اول باید موجودیت های مورد نظرمون رو ایجاد کنیم:
public class Student { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public virtual ICollection<Course> Courses { get; set; } } public class Course { public int Id { get; set; } public string Name { get; set; } public virtual ICollection<Student> Students { get; set; } }
دقت کن، داخل هر Entity، ما یه Collection از Entity ای که قصد داریم باهاش رابطه چند به چند داشته باشیم تعریف کردیم، موقعی که قصد تعریف رابطه های چند به چند رو داریم، اگر جدول چند به چند ما، غیر از کلید های خارجی، فیلد دیگه ای نداشته باشه، نیازی به تعریف موجودیت برای جدول چند به چند نداریم و کافیه فقط Collection های مربوطه رو تعریف کنیم و براش Map رو بنویسیم. نوشتن Map فقط برای یکی از Entity ها نوشته میشه، برای مثال من Map رو برای Student می نویسم:
public class StudentMap : EntityTypeConfiguration<Student> { public StudentMap() { HasMany(student => student.Courses) .WithMany(course => course=>Students) .Map(configuration => configuration.MapLeftKey("StudentId").MapRightKey("CourseId").ToTable("StudentsCourses")); }
در قسمت Map، باید دوبار HasMany نوشته بشه، یعنی Student داری چدین Course هست و در مقابل Course هم دارای چندین Student، در قسمت Map هم باید تنظیمات مربوط به جدولی که ارتباط چند به چند رو برقرار میکنه نوشته بشه، در اینجا، در قسمت MapLeftKey، نام ستون کلید سمت چپ که مربوط به مجموعه Many دوم هست (StudentId) و در قسمت MapRightKey نام ستون کلید سمت راست که مربوط به مجموعه Many اول هست (CourseId) نوشته میشه، در قسمت ToTable نام جدولی که ازش به عنوان جدول ManyToMany استفاده کردیم نوشته میشه، یعنی StudentsCourse.
با کد بالا، زمانی که یک موجودیت در لیست Courses موجودیت Student قرار بگیره، به صورت خودکار، عملیات درج تو جدول StudentsCourses انجام میشه.
امیدوارم مفهوم رابطه چند به چند و همینطور شیوه Map کردن اون در EntityFramework رو متوجه شدی باشی.
موفق و ITPRO ای باشی.
کانال تلگرام: https://t.me/TOSINSOAhmadi
منبع: web.tosinso.com