12

polimorfik assiociations (PA) 'ın nispeten basit bir veritabanı gereksinimi için oldukça lokma olduğunu polimorfik ilişkilendirmeleri uygulamak için: Çeşitli tablolar tek paylaşılan tablodaki alt kayıtları atalım. Klasik örnek, farklı akraba olmayan varlıklara uygulanan yorum kayıtları içeren tek bir tablodur.Nasıl varolan veritabanında

this question Mark'ta, PA'ları uygulamak için üç ortak yaklaşım gösteren mükemmel bir iş yapıldı. Eşit derecede mükemmel bir answer by Bill Karwin ile daha ayrıntılı olarak açıklanan taban tablosu yaklaşımını kullanmak istiyorum.

Somut bir örnek aşağıdaki gibi olacaktır: kişilerin

enter image description here

birincil anahtarlar temel tabloda aynı kilit değerlerine işaret eder ve Yorum tablosu temel tablo, bu nedenle tutarlılığı değinmektedir gözlenir. Buradaki önemli kısım, varlık tablolarının ana anahtarlarının farklı alanlarına sahip olmasıdır. Onlar Taban tablosundaki yeni bir kayıt oluşturmak ve işletmenin birincil anahtar olan üretilen anahtarı kopyalayarak oluşturulur.

Şimdi benim sorum: Eğer kendi ortak, karşılıklı örtüşen birincil anahtarlar üreten varlıkları olan varolan bir veritabanındaki başvuru bütünlüğü ile PA'ları tanıtmak istersem ne olur?

Seçenek 1:

Option 1

Her varlığın kendine ait birincil anahtar tutan ama aynı zamanda alternatif bir anahtar alır

Şimdiye kadar, ben iki seçenek var.

gibi:

önerilen yaklaşım
  • kapatın.
  • Taban tablası kararlıdır.

Beğenme:

  • Mevcut kişiler değiştirilmelidir.
  • Yorum sahibi olmak zor.

Seçenek 2:

Option 2

Her varlığın temel tablodaki kendi yabancı anahtar sütunu vardır. Bu Mark'ın çoklu sütun yaklaşımına benziyor.

gibi:

  • Mevcut kişiler değil etkiledi.
  • Bir yorumun sahibini bulmak kolay.

Beğenme:

  • Seyrek sütunlar
  • Taban tablo değil kararlı: PA ile yeni bir varlık tanıtıldı değişiklik ihtiyacı

Ben bir alanla muhtemelen 1. seçenek için eğilmek İki yönlü arama için Temel tablodaki "EntityName". Hangi seçenek daha iyi olurdu. Ya da başka bir, daha iyi, yaklaşım mı?

+0

Seçenek 1 bakımı daha kolay olur:

(EntityType 3 satır ile sadece bir yardımcı, bir referans tablosu bulunur). Taban tablonuza sütun eklemeniz gerekiyorsa, hem sorun olur hem de sayfa bölmeleri, işaretçiler vb. Nedeniyle çok fazla bakım gerektirir. – JNK

+0

@JNK İyi nokta, fiziksel depolama etkisinin akılda tutulması açısından önemlidir. –

+0

Seçenek 1'i kullanabilirsiniz, ancak başka bir vekil Alternatif Anahtar ile kullanamazsınız. Yeni Alternatif Anahtar, "EntityType" sütununa ("CHAR (1)", Olaylar için "E", "P", "D", "D" ile genişletilen mevcut Ana Anahtar (her bir varlığın) olabilir. Ürünler için) –

cevap

9

Seçenek 1'i kullanabilirsiniz, ancak ek bir yedek Alternatif Anahtar olmadan kullanabilirsiniz.

Bunun yerine, (diyelim CHAR(1), o Ürünlerin Kişiler Etkinlikleri için E, P, D olurdu) bir EntityType sütun ile (her varlığın) mevcut birincil anahtar uzatın. (EntityId, EntityType) bileşiği, Entity tablosunun Birincil Anahtarı ve diğer 3 alt tip tablolarındaki karşılık gelen bileşikler olacaktır.

Polymorphic_Associations

İlgili konular