چطور برای یک جدول کلید ترکیبی ایجاد کنیم؟
سلام. قصد دارم در جدول A مقدار ستونهای Unit, Line, PartNo منحصربفرد باشند. بنابراین تمام این ستونها را PrimaryKey تعیین کردم. اما مشکلم در استفاده از مقدار کلید در جدول B به عنوان ForeignKey هستش. در جدول B کدام مقدار باید به عنوان مقدار کلید وارد شود؟ اگر ستون Id برای جدول A تعیین کنم و مقدارش AutoNumber باشد بنابراین چون در هر ردیف این مقدار افزایش مییابد بنابراین میتوان یک Unit, Line, PartNo تکراری وارد کرد.
لطفا راهنمایی بفرمایید. آیا باید یک ستون از ترکیب مقادیر Unit, Line, PartNo ایجاد کنم و این ستون را به عنوان تنها ستون PrimaryKey تعیین کنم یا راه حل دیگری هم وجود دارد؟ تشکر
2 ضمیمه
نقل قول: چطور برای یک جدول کلید ترکیبی ایجاد کنیم؟
سلام و روز خوش
اگه منظور شما رو درست گرفته باشم :
فیلد ID برای TableA نیاز نیست، یک constraint روی این سه فیلد بسازین و همون رو هم primary key کنین (خودکار unique هم میشه):
ضمیمه 156674
یا اگه با SQL DDL راحتترین:
ALTER TABLE TableA
ADD CONSTRAINT TableA_PK PRIMARY KEY (PartNo, Line, Unit)
و relation بین دو جدول رو اینجوری تعریف کنین:
ضمیمه 156675
یا باز هم SQL DDL :
ALTER TABLE TableB
ADD CONSTRAINT FK_TableB_TableA
FOREIGN KEY (PartNo, Line, Unit) REFERENCES TableA (PartNo, Line, Unit)
ON UPDATE CASCADE
ON DELETE CASCADE
نقل قول: چطور برای یک جدول کلید ترکیبی ایجاد کنیم؟
ممنون از لطف شما. بله دنبال همین پاسخ بودم و مشکلم این بود که نمیدونستم IndexName باید برای ستونهای بعدی خالی باشه. علت اینکه نیاز به Id دارم اینه که در جدول B قصد دارم جهت ثبت اطلاعات فقط از یک شناسه واحد (تک ستون) استفاده کنم.
نقل قول: چطور برای یک جدول کلید ترکیبی ایجاد کنیم؟
خب شما میتونین به جای این که composite primary key تعریف کنین (همین که بالا گفته شد)
بیاین یک فیلد ID به عنوان primary key به جدول TableA اضافه کنین
ولی همچنان constraint رو روی سه فیلد نگه دارین (اینبار فقط unique)
تا اکسس خودش عملیات چک روی این سه فیلد رو انجام بده ولی بهتره هر سه فیلد رو required هم بکنین.
و این فیلد ID رو با یک فرمولی از روی این سه تا بسازین - مثلا: [PartNo] & "-" & [Line] & "-" & [Unit]
اینجا فرض کردم این سه فیلد string هستن و ممکنه مقادیر non-numeric داشته باشن و ID هم بالطبع باید string باشه
هرچند که بهتره اینها خودشون هم کدگذاری شده باشن (PartNoID, UnitID, LineID)
و ID هم long تعریف بشه، مثلا : [PartNoID]*10000 + [LineID]*100 + [UnitID]
حالا در جدول TableB این فیلد ID رو به عنوان foreign key تعریف کنین.
برای ساختن ID هم کافی هست در before change جدول TableA فیلد ID رو با فرمول مقداردهی کنین (با setfield)
نقل قول: چطور برای یک جدول کلید ترکیبی ایجاد کنیم؟