ورود

View Full Version : یک سوال ساده در پایگاه داده رابطه ای



hamed aj
چهارشنبه 03 مهر 1387, 00:54 صبح
سلام دوستان

یک سوال ساده در مورد پایگاه داده ی رابطه ای داشتم. هر کس از دوستان می دونه لطف کنه راهنمایی کنه

- ببینید دوستان، فرض کنید در یک پایگاه داده، دو جدول به نام "مشخصات" و "جنسیت" وجود داره. جدول جنسیت دو فیلد به نام "شناسه ی جنسیت" و "نوع جنسیت" داره که به شکل زیر می باشد :

23688

جدول مشخصات شامل : "نام"، "نام خانوادگی" و "شناسه ی جنسیت" به شکل زیر است :


23689

همانطور که ملاحظه می کنید یک رابطه 1:N بین فیلد "شناسه جنسیت" در دو جدول برقرار است.

سوالم اینه که وقتی من در یک برنامه، جدول "مشخصات" رو به یک DataGrid متصل می کنم، در فیلد جنسیت عدد 1 یا 2 ظاهر میشه که طبیعی هم هست ولی من می خوام نوع جنسیت یعنی "مرد" یا "زن" لود بشه. آیا راهی وجود داره؟ چون کاربری که با برنامه کار میکنه اعداد 1 یا 2 براش مفهومی نداره. البته توی زبان برنامه نویسی میشه اینکار رو با کدنویسی انجام داد ولی من می خوام ببینم توی خود دیتابیس مکانیسمی برای این کار وجود داره؟

با تشکر از دوستان

amin_alexi
چهارشنبه 03 مهر 1387, 07:55 صبح
سلام
روش درست استفاده نكردن از جدول جنسيت مي باشد ! و استفاده از يك فيلد در جدول مشخصات و كنترل ار داخل برنامه !
و حال براي كاري كه شما كردين ...
روش براي نمايش به كاربر كه بتونه نوع جنسيت رو هم بنويسه استفاده از Join مي باشد

Select * From Moshakhasat M
Left Join Jensiat J On M.JensiatID=J.JensiatID

hamed aj
چهارشنبه 03 مهر 1387, 12:08 عصر
سلام

ممنون که پاسخ دادین

یه سوال دیگه هم داشتم :

فرض کنید که در همین مثال بالا، در جدول جنسیت ردیف دوم حذف بشه. و چون من خاصیت Cascaded delete رو فعال کردم، در جدول مشخصات همه ی ردیف هایی که جنسیتشون برابر ردیف 2 هست حذف میشن که طبیعی هم هست. حالا میخوام ببینم میشه حذف نشن و یه مقدار پیشفرض بگیرند (یعنی set as default)

sheitoonbala
چهارشنبه 03 مهر 1387, 12:50 عصر
سلام.پیشنهاد منم اینه که تنها از 1 جدول مشخصات استفاده کنید و فیلد جنسیت رو به آخرش اضافه کنید.
حالا اگه هنوز اصرار دارید که 2 تا جدول جدا باشن برای اینکه set default بگرن،زمان ایجاد relation مقدار delete rule رو set default قرار بدید.

hamed aj
چهارشنبه 03 مهر 1387, 15:15 عصر
سلام دوستان

اگه از جدول جنسیت استفاده نکنم جامعیت داده ها (data Integrity) از بین میره ، شناسه جنسیت فقط 1 بایت فضا اشغال میکنه در صورتی که اگه از خود جنسیت استفاده کنم در بهترین حالت 3 بایت!!! تازه این یه مثال بود اگه یه جدول باشه که فیلدش 100 بایت کاراکتر باشه چی؟ ، هرچند اگه مجبور بشم باید این کار رو انجام بدم.

راستی این delete rule که گفتی توی کجاست؟ من پیدا نکردم. من با sql server 2000 کار میکنم

AminSobati
چهارشنبه 03 مهر 1387, 16:15 عصر
دوست عزیزم،
در نسخه 2005 میتونین SET NULL یا SET DEFAULT انجام بدین اما در نسخه های پایینتر تنها راهش Trigger هست

sheitoonbala
چهارشنبه 03 مهر 1387, 16:46 عصر
سلام.پیشنهاد من اینه که از 1 جدول استفاده کنید. فیلد جنسیت رو هم از جنس Bit در نظر بگیرید که مقدار True برای "مرد" و مقدار False برای "زن" توی اون ریخته بشه. حالا برای اینکه موقع select بجای True و False مقادیر مرد و زن رو نشون بده از کد زیر استفاده کنید.


select ID,name,family,CASE(gender) when 'True' then 'مرد' when 'False' then 'زن' end as 'gender' from moshakhasat


با این کار حداقل فضا رو مصرف کردید. موفق باشید...

hamed aj
چهارشنبه 03 مهر 1387, 19:01 عصر
از پاسخ دوستان ممنونم