Nasıl Kurulum 1: MySQL çok ilişkileri

4 Cevap php

Ben belli bir sanayi özgü kısaltmalar ve bunların tanımları aranabilir bir veri tabanı oluşturmak için çalışıyorum. Ben gerçek bir programlama yaptık yana yıl geçti, bu yüzden biraz öğrenme eğrisi arkasında değilim.

PHP kod yazıyorum ve ben veritabanı olarak MySQL kullanıyorum. Bu Postgres daha kolay yapılabilir, ben DBS anahtarlama karşı değilim, ama Oracle veya başka herhangi bir ticari sistemi kullanamazsınız.

Yani burada bir soru:

Her kısaltma böylece kurmak istiyorum: (1) 1, birden fazla veya özel kuruluşlar için geçerli; (2) 1 veya daha fazla ilişkili tanımlara sahiptir.

Karmaşıklık - en azından benim zihnimde: D - bazı kuruluşların tüm bu bir örgüt ile ilgili birden fazla tanımları ile bir tek kısaltmasını olabileceğini akla olduğunu geliyor. Aynı zamanda, kısaltma de DIGER kuruluşlar ile ilgili 1 veya daha fazla tanımlama olabilir.

Ben üzerinde bu komplike muyum?

Her tabloda ne olacağını alanlar ve ilişkiler - daha iyi nasıl MySQL kurulum tablo yapısını ve ilişkileri anlamak istiyorum.

Herkes çok meyilli hissediyor eğer bir SQL deyimi yararlı olacaktır, ama ben oluşturulan tablolar ve ithal bazı örnek verileri almak böylece en azından veritabanı şeması üzerinde sağlam bir kavrayışa almak umuyorum.

Birçok, hepsi çok teşekkürler ...

Dan

4 Cevap

Çözelti 4 tabloları içermelidir: Acronyms, Definitions, Organizations, and AcronymOrganization.

Acronym(id, acronym, definition_id)
Definitions(id, definition)
Organizations(id, organization)
AcronymOrganization(id, acronym_id, organization_id)

Ben sorunuzu anlamak, üç ayrı tablolar kullanabilirsiniz. Birincisi, kısaltmalar / tanımları tablo var o Örgütlerinin bir tablo var. Son olarak, sadece kısaltma tablodan bir anahtar ve organizasyon tablosundan bir anahtara başvuran ki, bir AcronymOrganization tablo var. Siz lütfen bu şekilde, bir organizasyon gibi birçok kısaltmalar olabilir.

Eğer veritabanını kurduktan sonra, size uygun organizasyon kimliği için sadece kısaltmalar toplama, iç üç tablo katılmak için birleştiren bir çift kullanmanız gerekir.

Ben sadece bir kısaltma tablo, bir organizasyon masa ve bir tanım tablo oluşturmak istiyorum. Kısaltma tablosundaki giriş için bir tane, ve organizasyon tablosunda girişi için diğer: iki yabancı tanımlama tablosunda anahtarlarını koydu.

Eğer sahip olmak istiyorsanız: tableA ve TABLEB arasındaki ilişkiyi m, o zaman üçüncü bir tablo gerekir.

tablo A. Fields: kimliği, adı

tablo B. Alanlar: kimliği, adı

masa AB. Alanlar: A, B (A A.ID için bir referans olduğunu, B B.ID için bir referans olduğunu)

[TABLEA] 1 ----- * [TABLE_AB] * ----- 1 [TABLEB]

Example

Masa a İçeriği:

ID Name
1  John
2  Mary
3  Piet

Tablo b İçindekiler:

ID Name
1  Microsoft
2  Google
3  Philips

Tablo ab İçeriği:

ID Name
1  2
1  3
2  2
3  1
3  3

Sonra bu gibi her şeyi seçmek:

select a.name,b.name 
from a,b,ab 
where a.id=ab.a and b.id=ab.b

Sonuç:

a.name  b.name
John    Google
John    Philips
Mary    Google
Piet    Microsoft     
Piet    Philips