رفتن به مطلب
pary_daryayi

ایجاد کلید خارجی در mysql

پست های پیشنهاد شده

سلام دوستان .

من جداول دیتابیس رو همیشه به صورت ویزاردی در phpmyadmin میسازم و اگه دو جدول قرار باشه با هم ارتباط داشته باشن فقط از لحاظ مفهومی یک کلید در جدول دوم میزارم که موقع درج کلید اولی در فیلد کلید جدول دومی قرار بگیره.

میخوام بدونم آیا برای این که یک کلید , بعنوان کلید خارجی تعریف بشه , همین کاری که من از لحاظ مفهومی میکنم , منطقیه ؟

یا اینکه لازمه حتما با کد نویسی یا قسمت ویزاردی که جداول رو relation میکنن , این کار انجام بشه ؟ آخه phpmyadmin یه قسمتی داره به نام relation.

از لحاظ کدنویسی هم که یک همچین چیزی لازمه ؟


create table enroll(
grade char(2),
sid int not null,
cid int not null,
primary key(sid,cid),
foreign key cid references courses on delete cascade,
foreign key sid references students on delete cascade
);

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

البته یادمه یه بار جایی خونده بودم که کلید خارجی رو باید index کنید و نوع جداولی که قراره با هم ارتباط داشته باشند رو innodb .

ممنون میشم توضیح بدین.

به اشتراک گذاری این ارسال


لینک به ارسال

الان مشکل شما وقتی که میخوای لایه های دیتابیس رو درست کنی یا موقع ارتیاط دیتابیس ها با همه ؟

به اشتراک گذاری این ارسال


لینک به ارسال

من نحوه ی ایجاد جداولی که قراره با هم ارتباط داشته باشن برام سواله .

با کدنویسیش مشکلی ندارم .

میخوام بدونم آیا میشه این ارتباط رو , فقط از لحاظ مفهومی ایجاد کرد ؟

یعنی cascade نکنیم و فقط وقتی رکوردی از parent حذف میشه بصورت منطقی بگیم رکوردش در child هم حذف بشه.

کدوم اصولی تره ؟

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

میخوام بدونم شما چطور این ارتباط ها رو تعیین میکنید ؟

فیزیکی یا منطقی ؟

ویرایش شده توسط pary_daryayi

به اشتراک گذاری این ارسال


لینک به ارسال

نمیدونم پاسخی که دنبالشی اینه یا نه ولی خوب فرض کن دو تا جدول داریم (posts, users)

post-1230-0-47059800-1378452024_thumb.pn

حالا میخوایم این دوتا جدول رو با هم ارتباط میدیم و یه جدولی درست میکنیم که بشه ازش اطلاعاتی یکتایی در بیاریم

post-1230-0-28104000-1378452292_thumb.pn

به اشتراک گذاری این ارسال


لینک به ارسال

من با این مفاهیم مشکلی ندارم .

ببینید ما میتونیم برای ایجاد یک جدول در دیتابیس یا کدش رو در قسمت sql بنویسیم و یا بیایم بصورت ویزاردی یک جدول ایجاد کنیم . درسته ؟

حالا میخوام ببینم برای ارتباط دو جدول هم آیا بصورت ویزاردی عمل میکنید یا کدش رو مینویسید .

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

ویرایش شد :

با کدش مشکلی ندارم . قسمت ویزاردی اش رو مطمئن نبودم که پیدا کردم :

1 - فرض کنیم جدول parent ما اسمش هست person . کلید اصلی اش هست ---- > id

2 - یک جدول child هم داریم به نام Rregister که هر شخصی از person میتونه املاک مختلفی رو ثبت کنه . کلید خارجی اش هست --- > id_person از نوع index

3 - هر دو جدول از نوع innodb هستن .

4 - در قسمت structer جدول register ( جدول فرزند) , تنظیمات مربوطه رو در قسمت relation view انجام میدیم . طبق شکل 1

5 - نتیجه ی این ارتباط رو در شکل دوم ببینید .( روی desiner در phpmyadmin باید کلیک کنید)

6 - حالا اگر ما رکوردی رو از person حذف کنیم , از child هم رکوردی که بهش مربوط هست حذف میشه .

post-1361-0-37482100-1378479257_thumb.jp

post-1361-0-63554700-1378479352_thumb.jp

ویرایش شده توسط pary_daryayi

به اشتراک گذاری این ارسال


لینک به ارسال

تا حالا فرصت نشده از این خاصیت phpmyadmin استفاده کنم توی اکثر مواقع با کد کار می کنم ولی تو بعضی موارد از مدیریت دیتابیس (sequel pro) استفاده می کنم . البته در مورد phpmyadmin نمی دونم ولی توی sequel pro هنگام برقراری ارتباط بین جدول ها میشه شرطی برای آپدیت و حذف رکورد ها در این ارتباط تعریف کرد یا restricted و یا cascading.

به اشتراک گذاری این ارسال


لینک به ارسال

تو phpmyadmin هم میشه cascade رو ویزاردی انجام داد . تو عکس نشون دادم .

به اشتراک گذاری این ارسال


لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


×
×
  • اضافه کردن...