سؤال

أحتاج إلى إضافة مفتاح بديل للضغط التلقائي إلى ثلاثة جداول في مستودع البيانات الخاص بي:

ملاحظة: هذه ليست أسماء الجدول الحقيقية

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 البديل

  1. تغيير الجدول لإنشاء عمود مفتاح البديل. باستثناء ، يجب أن تكون لا شيء.

  2. اكتب برنامجًا صغيرًا لتعيين القيم الرئيسية. إنها حلقة تقوم بالتحديثات.

  3. قم بتغيير الجدول لجعل عمود مفتاح البديل غير الفارق ، أو التلقائي التلقائي ، وفهرسة ، وفريدة من نوعه ، إلخ.

أنت الآن بحاجة إلى إنشاء FK's.

  1. تغيير الجدول لإضافة عمود FK. مرة أخرى ، يجب أن تكون لاغية.

  2. اكتب برنامجًا صغيرًا لتعيين عمود FK. هذا هو مختار (للحصول على صف PK استنادًا إلى مفاتيح غير محددة) ، وتحديث إلى جدول المرجع.

  3. إذا لزم الأمر ، قم بتغيير الجدول لجعل FK Nonull. هذا ليس ضروريًا دائمًا ، فهذا يعتمد على تعريف علاقة جدول FK بجدول PK.

كرر إنشاء FK لجميع الجداول الأخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top