v2.5.2
Giriş yap

İlişkisel olmayan veritabanına sonradan foreign key tanımlamak

farukokutan
662 defa görüntülendi ve 1 kişi tarafından değerlendirildi

Merhaba arkadaşlar, elimde hazır hastane veritabanı var. Verileri eklemek için iller , ilçeler (districts) ve hastaneler (hospitals) tablosu oluşturdum. Sorun şu ki bendeki dosyada hastane tablosundaki ilce alanı foreign key değil district_name olarak ilceler tablosuyla ilişki kurulmadan varchar olarak tanımlanmış. Ben ise iki tablo arasında ilişki kurmak istiyorum, yani district_name sütununa 'ÇUKUROVA', 'CEYHAN', 'YÜREĞİR', ....., 'TATLIÇAY' olarak eklemiş verileri, tabloya district_id'lerini (ilceler tablosunaki idlerini) 135,136,138, ..., 155 eklemek istiyorum.
Google da tabloya sonradan foreign key eklemek başlıklarıyla yazılmış bir çok yazıyı okudum ve uyguladım ama olmadı.
Yaklaşık 1000 satırlık kodu tek tek id'leri ile değiştiremeyeceğim için bir çözüm yolu bulmayı ümit ediyorum.
Bu konuda bilgisi olan varsa, yardımcı olabirse sevinirim.

hastaneler tablosu

CREATE TABLE "hospitals" (
	"id"	integer NOT NULL,
	"hospital"	varchar(200) NOT NULL,
	"address"	varchar(500) NOT NULL,
	"city_id"	integer,
	"district_id"	integer NOT NULL, ***error
	FOREIGN KEY("district_id") REFERENCES "districts"("id") DEFERRABLE INITIALLY DEFERRED,
	FOREIGN KEY("city_id") REFERENCES "cities"("id") DEFERRABLE INITIALLY DEFERRED,
	PRIMARY KEY("id" AUTOINCREMENT)
);
INSERT INTO `hospitals` (`id`, `city_id`, `district_id`, `hospital`, `address`) VALUES

bu string olan district_name sütununu district_id değerleri ile değiştirmek istiyorum

(1, '01',     'ÇUKUROVA',        'Adana Ağız Ve Diş Sağlığı Merkezi', '100.Yıl Mah. 85341 Sk No:2 Çukurova/adana'),

(2, '01',     'CEYHAN',          'Adana Ceyhan Devlet Hastanesi', 'Ceyhan Devlet Hastanesi, Ulus Mh., 01950 Ceyhan/adana',),
    
(3, '01',     'YÜREĞİR',         'Adana Devlet Hastanesi', 'Adana Devlet Hastanesi H.Ömer Sabancı Cd. (Eski Numune Hastanesi) 01140 Seyhan AdananSemt Polikliniği Eski Adana Devlet Hastanesi Karataş Yolu Üzeri 01160 Yüreğir Adanann')
                 .
                 .
                 .
                 .
                 .
                 .
              

Cevap yaz
Cevaplar (2)
farukokutan
1459 gün önce

İnt alana string ifade eklenemeyeceğini biliyorum, yazarken eksik anlatmışım. district_id foreign key olarak özellikle ben tanımladım,
bende ki hazır veritabanında district_name olarak tanımlanmış.
Ben iki tablo (ilceler ve hastane tabloları) arasında ilişki olmasını istiyorum, yani tabloya district_name'leri ile 'ÇUKUROVA', 'CEYHAN', 'YÜREĞİR', 'TATLIÇAY' olarak eklenmiş verinin district_id'lerini 135,136,138, ..., 155 olarak idleri ile tabloya eklenmesini istiyorum.
Kısacası tabloya sonradan foreign key tanımlayarak verilerin district_id'leri almak ama yapamadım. Umarım bu sefer derdimi anlatabilmişimdir.
NOT: Tabloya district_id'yi foreign key tanımlıyorum ama id değerleri atanmıyor.

throw
1459 gün önce

district_id alanı integer tanımlı sen "ÇUKUROVA" gibi bir string gönderiyorsunuz.