PDA

View Full Version : ترکیب چند کلید برای کلید اصلی



Bahar_HS
چهارشنبه 12 خرداد 1389, 07:38 صبح
با سلام
چطور میشه
1)چندتا کلید رو به عنوان کلید اصلی در نظر گرفت؟
2) و در جداول دیگه چطور میشه با این کلید اصلی ترکیبی کار کرد؟

محمد سلیم آبادی
چهارشنبه 12 خرداد 1389, 08:46 صبح
کلید های ترکیبی به Composite Keys یا Compound Key معروف هستند.
منظورتون از چه طریقی هست؟ کد نویسی؟
همانطوری که کلید اولیه ترکیبی هست باید کلید خارجی هم ترکیبی باشه. و در JOIN باید از ترکیب چند شرط اتصال ایجاد شود....

Bahar_HS
چهارشنبه 12 خرداد 1389, 14:56 عصر
سلام
اگه ممکنه هم از طریق کدنویسی و هم از طریق ویزاردش،
من 3 تا فیلد دارم که می خوام به عنوان کلید اصلی تعریف کنم ،وبا این کلیداین جدول باید پیوند بخوره به یه جدول دیگه و داده ها بازیابی بشن ،
چطوری میشه؟:متفکر:
با سپاس:تشویق:

محمد سلیم آبادی
چهارشنبه 12 خرداد 1389, 15:04 عصر
از طریق کد:

CREATE TABLE Sample
(Col1 INT NOT NULL,
Col2 INT NOT NULL,
Col3 INT NOT NULL,
PRIMARY KEY(Col1, Col2, Col3));

SELECT *
FROM Sample AS S
JOIN OtherTable AS O
ON S.Col1 = O.Col1
AND S.Col2 = O.Col2
AND S.Col3 = O.Col3;

pesar irooni
چهارشنبه 12 خرداد 1389, 23:23 عصر
در طراحی database معمولا تمایل داریم از کلید های ترکیبی برای کلید اصلی استفاده نکنیم
شما از یک فیلد IDENTITY به عنوان کلید اصلی استفاده کن و فقط یه unique index رو جدول اصلی بذار تا ترکیب اون ۳ تا unique باشه

Bahar_HS
چهارشنبه 12 خرداد 1389, 23:28 عصر
با سلام
ممنون از راهنمایی تون،
من هنوز ابهام دارم،
توی جدول اول سه تا ستون هست :"کدمشتری،تاریخ،شماره ی فاکتور"
از اون جایی که ستون فاکتور باید خودکار و توسط sql باشه دیگه نمیشه ID در نظر گرفت،
برای همین هرسه رو می خوام به عنوان کلید اصلی در نظر بگیرم،
ولی نمی تونم مسئله join رو حل کنم،

می خوام یه دستور بازیابی بنویسم که از جدول اول فقط تاریخ و شماره ی فاکتور باشه،در کنار ستون های جدول دوم که شامل ردیف،نام کالا، قیمت،...

درحلات عادی که IDداریم و کلید اصلی ترکیبی نیست ، نقطه ی پیوند(براساس همین کلید) مشخصه ،
اما نمی دونم این کلید اصلی ترکیبی چطور در جدول دوم به عنوان کلید خارجی تعریف بشه ،
یعنی در جدول دوم به جای این کلید چه ستونی رو باید در نظر گرفت؟

به طور مثال 2تا جدول داریم :1)کدمشتری،نام،نام خانوادگی،...
2)کدمشتری،نام کالا،.....

اینجا کد مشتری ستونی در هر دو جدوله وبرهمین اساس میشه بین دو جدول join ایجاد کرد،

اما من در این موردی که گفتم نمی دونم در جدول دوم چه ستونی تعریف کنم و نقطه ی پیوند رو چطور در نظر بگیرم؟
(امیدوارم منظورم رو رسونده باشم)
بازم ممنون

محمد سلیم آبادی
چهارشنبه 12 خرداد 1389, 23:46 عصر
از اون جایی که ستون فاکتور باید خودکار و توسط sql باشه دیگه نمیشه ID در نظر گرفت،

چرا فکر می کنید ستون ID که دارای خصیصه ی IDENTITY هست را نمیشه PK (پرایمری کی) در نظر گرفت؟


توی جدول اول سه تا ستون هست :"کدمشتری،تاریخ،شماره ی فاکتور"


به طور مثال 2تا جدول داریم :1)کدمشتری،نام،نام خانوادگی،...
2)کدمشتری،نام کالا،.....

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

در کل در جدول دوم که ستون خارجی ترکیبی باید تعریف بشه باید هر سه ستونی که در جدول اول به عنوان کلید در نظر گرفته شده اند وجود داشته باشه. یعنی مشخصات هر سه ستون را در جدول دوم ذخیره کنید تا در زمان JOIN طبق کدی که معرفی کردم اتصال انجام بدین.
اگر مشکلات در ایجاد این قید کلید خارجی هست در دیاگرام به سادگی میشه این قید را با drag and drop ایجاد کرد فقط موقع ارتباط دادن ستون ها باید سه ستون از جدول A را به سه ستون مرتبط در جدول B اتصال دهین.

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

Bahar_HS
چهارشنبه 12 خرداد 1389, 23:53 عصر
http://www.barnamenevis.org/forum/showthread.php?t=224403
اگه ممکنه این لینک رو ببینید،
درEnterprice Manager فقط برای یه ستون IDENTITY در نظر می گرفت،ولی من می خوام هم شماره ی فاکتور IDENTITY باشه و هم ID این جدول که نمی دونم چطور میشه،

کارم گیرکرده:ناراحت:
ممنون از راهنمایی تون.

pesar irooni
پنج شنبه 13 خرداد 1389, 00:02 صبح
از اون جایی که ستون فاکتور باید خودکار و توسط sql باشه دیگه نمیشه ID در نظر گرفت
چرا نشه؟؟

برای همین هرسه رو می خوام به عنوان کلید اصلی در نظر بگیرم،
شدیدا توصیه میکنم این کار رو نکنید و به جای آن روی این سه فیلد یه unique index بزارید تا نقشی مثل کلید اصلی داشته باشه ولی در اصل همان فیلد IDENTITY کلید اصلیه و میشه به عنوان کلید خارجی در جدول دیگه مورد استفاده قرار بگیره بدون اینکه مثل حالت اول مشکل داشته باشه، ضمنا Redundancy هم نداره

Bahar_HS
پنج شنبه 13 خرداد 1389, 00:13 صبح
چرا نشه؟؟


برای من هم راحتره که یه کلید ،اصلی باشه نه چندتا،
این که می گم نمیشه،چون وقتی یه ستون رو (در Desigen) ،از قسمت پایین IDENTITYشو
Yes می کنم ، ستون دیگه NO میشه وبرعکس


شدیدا توصیه میکنم این کار رو نکنید و به جای آن روی این سه فیلد یه unique index بزارید تا نقشی مثل کلید اصلی داشته باشه ولی در اصل همان فیلد IDENTITY کلید اصلیه و میشه به عنوان کلید خارجی در جدول دیگه مورد استفاده قرار بگیره بدون اینکه مثل حالت اول مشکل داشته باشه، ضمنا Redundancy هم نداره

میشه بگید چطور میشه روی این سه فیلد یه unique index گذاشت؟

خیلی خیلی ممنون از راهنمایی تون:تشویق::تشویق::تشویق:

pesar irooni
پنج شنبه 13 خرداد 1389, 00:57 صبح
برای من هم راحتره که یه کلید ،اصلی باشه نه چندتا،
این که می گم نمیشه،چون وقتی یه ستون رو (در Desigen) ،از قسمت پایین IDENTITYشو
Yes می کنم ، ستون دیگه NO میشه وبرعکسهمون چیزی که IDENTITY اش رو YES کردی همون رو بگیر کلید اصلی

میشه بگید چطور میشه روی این سه فیلد یه unique index گذاشت؟
برای مثال تو 2005 Indexes/Keys رو انتخاب کن و از دکمه ADD رو بزن و بعد از قسمت columns اون ستونهایی که میخوای ترکیبش یکتا باشه رو انتخاب کن و بعد قسمت Is Unique رو Yes کن
آخر سر هم که Close

Bahar_HS
پنج شنبه 13 خرداد 1389, 11:57 صبح
با سلام و سپاس ،:تشویق::تشویق::تشویق:

خیلی خیلی شرمنده ،:چشمک:
راستش دیشب اونقدر خسته بودم که دیگه نمی دونستم چی می گم وباید چکار کنم،

شما درست می گید ، باید همین کارروبکنم.