PDA

View Full Version : انتخاب Primary Key مناسب؟



hm1984ir
سه شنبه 22 آبان 1386, 08:32 صبح
با سلام خدمت همه دوستان:
فرض کنید یک DataBase داریم که در اون اطلاعات مثلا یک دانش آموز رو ذخیره می کنیم که این جدول Relation های زیادی به جداول دیگه داره حالا سوال اینجاست که اگر من کد ملی رو به عنوان فیلد کلید بگیرم چون این فیلد در دنیای واقعی معنی دار بوده اگر کاربر آن را اشتباه وارد کند وبعدا بخواهد آن را تصحیح کند این تصحیح روی جداول دیگری هم که یک foreign key از این Table دارند باید صورت بگیرد که این فکر می کنم هزینه زیادی داشته باشه از طرف دیگر من تصمیم گرفتم که یک فیلد AutoNumber به جدول اضافه کنم و اون رو به عنوان فیلد کلید تعیین کنم ولی اون هم یک مشکل داشت و اون این بود که برای درج اطلاعات در هر جدولی که این فیلد رو به عنوان foreign key در نظر گرفته بود باید ابتدا از طریق کد ملی این فیلد کلید رو پیدا می کردیم(چون ما توی دنیای واقعی همچین فیلدی رو نداشتیم)بعد توی اون جدول به عنوان foreign key ثبت می کردیم .
قیلا از راهنمایی های شما در این زمینه متشکرم.
حمید.

پرواز
سه شنبه 22 آبان 1386, 09:20 صبح
1- در صورتی که از کد ملی استفاده کنید برای تصحیح احتمالی فیلد کد ملی می تونید از امکانات خود SQL Server استفاده کنید.

ON UPDATE CASCADE

2- اگه تو برنامه کاربردیتون از این جداول استفاده می کنید که حتی اگه از کد ملی استفاده کنید لازم نیست که هر بار که کاربر می خواد اطلاعات جدید وارد کنه بیاد و کد ملی رو هم تایپ کنه. اگه ارتباط رو درست به برنامتون معرفی کنید خود برنامه این کارو براتون انجام میده.
یعنی به ازای هر Insert در جدول Child یه دونه از Forein Key کپی می کنه تو فیلد مربوطه. (حتی بدون اینکه به کاربر نشون داده بشه)

SabaSabouhi
سه شنبه 22 آبان 1386, 10:20 صبح
با سلام خدمت همه دوستان:
فرض کنید یک DataBase داریم که در اون اطلاعات مثلا یک دانش آموز رو ذخیره می کنیم که این جدول Relation های زیادی به جداول دیگه داره حالا سوال اینجاست که اگر من کد ملی رو به عنوان فیلد کلید بگیرم چون این فیلد در دنیای واقعی معنی دار بوده اگر کاربر آن را اشتباه وارد کند وبعدا بخواهد آن را تصحیح کند این تصحیح روی جداول دیگری هم که یک foreign key از این Table دارند باید صورت بگیرد که این فکر می کنم هزینه زیادی داشته باشه از طرف دیگر من تصمیم گرفتم که یک فیلد AutoNumber به جدول اضافه کنم و اون رو به عنوان فیلد کلید تعیین کنم ولی اون هم یک مشکل داشت و اون این بود که برای درج اطلاعات در هر جدولی که این فیلد رو به عنوان foreign key در نظر گرفته بود باید ابتدا از طریق کد ملی این فیلد کلید رو پیدا می کردیم(چون ما توی دنیای واقعی همچین فیلدی رو نداشتیم)بعد توی اون جدول به عنوان foreign key ثبت می کردیم .
قیلا از راهنمایی های شما در این زمینه متشکرم.
حمید.


با سلام
پیش‌نهاد مى‌کنم که کلید رو جدا از اطلاعات جدول در نظر بگیرى. دلیلى نداره که حتماً یکى از خصیصه‌هاى شى‌ء دانش‌آموز شما کلید جدول باشه به‌تره شما یک کلید Identity رو به عنوان کلید در نظر بگیرى چون:
1. ممکنه اون خصیصه واقعاً واحد نباشه ( من حتا شنیدم که کد ملى هم تکراریش دیده شده )
2. کد ملى الان وجود داره اما ممکنه 2 سال دیگه یه چیزدیگه بجاش بیاد ( تو ایران این چیزا امکان پذیره و من باز شنیدم که قراره تغییر کنه و یه کد دیگه جاشو بگیره )
3. یک کلید Identity از جنس int به طول 4 بایت کار شما رو کاملاً انجام مى‌ده اما اگه بخواى از کد ملى استفاده کنى باید یا از Decimal استفاده کنى یا از BigInt که 9 یا 8 بایت مصرف مى‌کنه ( نه تنها در جدول دانش‌آموز بلکه در تمامى جداولى که با جدول دانش‌آموز از طریق ForeignKey ارتباط دارن )
4. در صورت اشتباه وارد شدن کد ملى براى اصلاح باید بر اى کلیه‌ى Relation هایى که جدول‌هاى مختلف با جدول دانش‌آموز شما دارن Cascade Update Related Fields رو انتخاب کنید، اما اگه کلید شما مستقل باشه دیگه هم‌چنین مشکلى وجود نداره و به راحتى امکان اصلاح رو دارید بدون نیاز به اصلاح جدول‌هاى مرتبط.

صبا صبوحى

SYNDROME
سه شنبه 22 آبان 1386, 19:47 عصر
کد ملی انتخاب خوبی است.
می توانی برای Update شدن کلیدهای خارجی هم از Relation خود SQL استفاده کنی.
موفق باشید