pary_daryayi

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

7 پست در این موضوع قرار دارد

سلام دوستان .

من جداول دیتابیس رو همیشه به صورت ویزاردی در 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 .

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

0

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


لینک به پست

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

1

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


لینک به پست

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

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

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

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

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

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

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

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

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

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


لینک به پست

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

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

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

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

2

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


لینک به پست

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

ببینید ما میتونیم برای ایجاد یک جدول در دیتابیس یا کدش رو در قسمت 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
1

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


لینک به پست

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

2

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


لینک به پست

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

0

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


لینک به پست

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری