كيفية إضافة مفتاح بديل إلى الجداول ذات الصلة؟
-
30-09-2019 - |
سؤال
أحتاج إلى إضافة مفتاح بديل للضغط التلقائي إلى ثلاثة جداول في مستودع البيانات الخاص بي:
ملاحظة: هذه ليست أسماء الجدول الحقيقية
Jakmaster (Jakmasterid ، التاريخ) (PK) ملاحظة: Jakmasterid هو Varchar (60)
Jaktoroad (Jakmasterid ، التاريخ) (FK)
Jaktobig (Jakmasterid ، Date) (FK)
ما هي الخطوات التي يجب أن أتخذها لإضافة مفتاح بديل لهذه الجداول الثلاثة بحيث تشير المفاتيح الجديدة إلى بعضها البعض بشكل صحيح؟
شكرًا!
المحلول
أفترض أنك ترغب في استبدال Jakmasterid بحقل تلقائي ، بحيث لا يحتاج الجدولين الآخرون إلى حقل Varchar (60) ولتحسين أوقات الاستعلام ، ولكنك تحافظ على jakmasterid كمعلومات.
-- set database single-user
-- drop foreign keys
create table NewMaster (ID int identity(1, 1), JakMasterId, Date))
insert NewMaster(JakMasterId, Date) select JakMasterId, Date from JakMaster
drop table JakMaster
sp_rename 'NewMaster', 'JakMaster'
alter table JakToRoad add MasterId int
alter table JakToBig add MasterId int
update JakToRoad set MasterId = JakMaster.ID
from JakToRoad
inner join JakMaster on JakMaster.JakMasterId = JakToRoad.JakMasterId
update JakToBig set MasterId = JakMaster.ID
from JakToBig
inner join JakMaster on JakMaster.JakMasterId = JakToBig .JakMasterId
alter table JakToRoad drop column JakMasterId
alter table JakToBig drop column JakMasterId
alter table JakToRoad add constraint FK_JTRtoJM foreign key (MasterId) references JakMaster (ID)
alter table JakToBig add constraint FK_JTBtoJM foreign key (MasterId) references JakMaster (ID)
-- reset database to multi-user
نصائح أخرى
قد تكون قادرًا على القيام بذلك في ثلاث خطوات داخل DB لإنشاء PK البديل
تغيير الجدول لإنشاء عمود مفتاح البديل. باستثناء ، يجب أن تكون لا شيء.
اكتب برنامجًا صغيرًا لتعيين القيم الرئيسية. إنها حلقة تقوم بالتحديثات.
قم بتغيير الجدول لجعل عمود مفتاح البديل غير الفارق ، أو التلقائي التلقائي ، وفهرسة ، وفريدة من نوعه ، إلخ.
أنت الآن بحاجة إلى إنشاء FK's.
تغيير الجدول لإضافة عمود FK. مرة أخرى ، يجب أن تكون لاغية.
اكتب برنامجًا صغيرًا لتعيين عمود FK. هذا هو مختار (للحصول على صف PK استنادًا إلى مفاتيح غير محددة) ، وتحديث إلى جدول المرجع.
إذا لزم الأمر ، قم بتغيير الجدول لجعل FK Nonull. هذا ليس ضروريًا دائمًا ، فهذا يعتمد على تعريف علاقة جدول FK بجدول PK.
كرر إنشاء FK لجميع الجداول الأخرى.