SEN2104 · 2. hafta · Entity-Relationship Model

Varlık-ilişki (ER) modeli

Varlıklar, öznitelik türleri, ilişkiler, kardinalite ve katılım, zayıf varlıklar ve specialization. Vizede ER diyagramı okuma ve çizme sorularının temeli.

entityentity setattributecomposite attributemultivalued attributederived attributerelationship setdegreerolemapping cardinalitytotal participationpartial participationweak entity setdiscriminatoridentifying relationshipspecializationgeneralizationdisjointoverlappingaggregation

Veritabanı tasarımı koddan önce kağıt üzerinde başlar. Varlık-ilişki modeli (entity-relationship model, ER) gerçek dünyayı “hangi şeyler var, birbirlerine nasıl bağlı” diye resmetmenin standart yolu. Vizede iki tip soru çıkar: bir senaryodan ER diyagramı çizmek, ya da verilen diyagramdan kardinalite, katılım, anahtar okumak. Bu sayfa boyunca derste kullandığımız üniversite veritabanını (student, instructor, course, department, takes, teaches) ER olarak kuracağız.

Altın kurallar:

  1. Varlık = isim, ilişki = fiil. “Öğrenci dersi alır”: student ve course varlık, takes ilişki.
  2. Öznitelik türünü sor: bölünür mü (composite), birden çok değeri var mı (multivalued), hesaplanır mı (derived)?
  3. Kardinalite ve katılım ayrı şeyler. Kardinalite “en fazla kaç”, katılım “en az bir tane zorunlu mu”.
  4. Anahtarı olmayan varlık zayıftır ve sahibine total katılımla bağlanır.
  5. Örnek veri kuralı ispatlamaz. Kardinaliteyi iş kuralı belirler.

Varlık ve varlık kümesi

Bir varlık (entity), diğerlerinden ayırt edilebilen tek bir nesnedir: öğrenci Ada, ders CS305, CS bölümü. Aynı özellikleri paylaşan varlıkların toplamı varlık kümesidir (entity set): tüm öğrenciler student kümesini oluşturur. Programlamadaki benzetmeyle varlık kümesi sınıf, varlık nesnedir.

Her varlık öznitelikleriyle (attribute) tanımlanır. Bir özniteliğin alabileceği değerler kümesine domain denir: tot_cred için 0 ile 240 arası tam sayılar gibi. Varlıkları birbirinden ayıran öznitelik(ler) anahtardır (key); student için stu_id.

Öznitelik türleri

TürAnlamıÜniversite örneğiDiyagramda
Basit (simple)Bölünmeztot_creddüz elips
Bileşik (composite)Alt parçaları varname = first_name + last_namealt elipsler
Tek değerli (single-valued)Varlık başına bir değerstu_iddüz elips
Çok değerli (multivalued)Birden çok değer olabilirhocanın phone numaralarıçift elips, {phone}
Türetilmiş (derived)Başka öznitelikten hesaplanırdate_of_birth’ten agekesik elips, age()
Anahtar (key)Varlığı tekil belirlerstu_idaltı çizili

Türetilmiş öznitelik saklanmaz, istendiğinde hesaplanır. 2005-11-02 doğumlu bir öğrenci 2026-10-01’de 20 yaşındadır: yıl farkı 21, ama doğum günü henüz gelmedi. age’i saklasaydın her yıl güncellemek gerekirdi; date_of_birth hiç değişmez. Bu yüzden saklanan temel veri, türetilen hesaplanır.

Bu derste kullanacağımız metin notasyonu (Silberschatz’ın kutulu notasyonuna yakın) şöyle:

+------------------------+
| student                |
+------------------------+
| _stu_id_               |     _x_   : birincil anahtar (altı çizili)
| name                   |     girintili : bileşik özniteliğin parçaları
|    first_name          |
|    last_name           |
| date_of_birth          |
| { phone }              |     { }   : çok değerli
| age ( )                |     ( )   : türetilmiş
+------------------------+

TUZAK · çok değerli ile bileşik karışır. name iki parçadan oluşur ama her öğrencinin tek adı var: bileşik. phone tek parçalı ama birden çok değeri olabilir: çok değerli. Soru “birden fazla” diyorsa multivalued, “parçalardan oluşur” diyorsa composite.

İlişkiler, derece ve roller

İlişki (relationship), varlıklar arasındaki bağdır: “Ada CS305’i alıyor”. Aynı türden ilişkilerin kümesi ilişki kümesidir (relationship set): takes. İlişkiye katılan varlık kümesi sayısı derecedir (degree). Üniversite modelinde ilişkilerin çoğu ikili (binary):

student ---- < takes > ---- course          (binary, öznitelik: grade)
instructor ---- < teaches > ---- course     (binary)
instructor ---- < advisor > ---- student    (binary)
instructor ---- < inst_dept > ---- department

Bir varlık kümesi aynı ilişkiye iki kez katılabilir. Örneğin prereq ilişkisi course’u course’a bağlar: CS201’in ön koşulu CS101. Burada hangi tarafın ne olduğunu rol (role) isimleri söyler: course_id rolü ve prereq_id rolü. Böyle ilişkilere recursive ilişki denir.

İlişkinin de özniteliği olabilir. takes üzerindeki grade öğrenciye de derse de ait değil, ikisinin çiftine ait. M:N bir ilişkinin özniteliği bu yüzden ilişkide kalır.

Ternary ilişkiler

Bir hoca, bir öğrenciye belirli bir projede rehberlik ediyorsa üç varlığı bağlayan proj_guide(instructor, student, project) ilişkisi gerekir. Bunu üç ikili ilişkiye bölmek cazip görünür ama bilgi kaybettirir:

proj_guide üçlüleri:  (I1,S1,P1) (I1,S2,P2) (I2,S1,P2)
ikili parçalar:       IS={I1S1, I1S2, I2S1}  SP={S1P1, S2P2, S1P2}  IP={I1P1, I1P2, I2P2}
geri birleştir:       (I1,S1,P1) (I1,S1,P2) (I1,S2,P2) (I2,S1,P2)
sahte üçlü:           (I1,S1,P2)   I1 ile S1 P2'de birlikte değildi

Eşleme kardinalitesi (mapping cardinality)

Kardinalite, bir varlığın ilişki üzerinden en fazla kaç varlıkla eşleşebileceğini söyler.

KardinaliteAnlamıÜniversite örneği
1:1Her iki tarafta en çok birdepartment ve dean (bölüm başkanı)
1:NSol taraf birçok sağa, sağ taraf en çok bir solainstructor advisor student
N:11:N’nin tersiinstructor inst_dept department (çok hoca bir bölüm)
M:Nİki tarafta da birçokstudent takes course

Örnek veride S1 dört ders alıyor, CS101’i dört öğrenci alıyor: takes iki yönde de “birçok”, M:N. teaches ise örnekte bir hocaya en çok iki ders, bir derse en çok bir hoca düşüyor. Bu veri 1:N ile uyumlu. Ama bir dersin iki hocası olması gerçek bir üniversitede mümkünse tasarım M:N olmalı.

TUZAK · veriye bakıp kardinalite okumak. Örnek tablo bir kısıtı ispat edemez, sadece çürütebilir. Tabloda her ders tek hocalı diye “1:N’dir” diyemezsin. Sınav “bu veriyle tutarlı mı” diye soruyorsa veriye bak; “kardinalite nedir” diyorsa senaryodaki kurala bak.

Silberschatz notasyonunda ok (-->) “en çok bir” tarafını gösterir, düz çizgi “birçok”. Başka kitaplar 1 ve N harfleri ya da kaz ayağı (crow’s foot) kullanır. Sınavda hangi notasyonla çizildiğine bak.

Katılım ve min..max gösterimi

Katılım (participation) “en az bir” sorusudur.

  • Total katılım: kümedeki her varlık en az bir ilişkide yer alır. Her hocanın bir bölümü olmak zorunda: instructor, inst_dept’e total katılır. Çift çizgiyle çizilir.
  • Partial katılım: bazı varlıklar hiçbir ilişkide olmayabilir. Örnek veride S6 (Firat) hiç ders almamış, BI100’ü kimse vermiyor, I6 (Yildiz) hiç ders vermiyor. Yani student’ın takes’e, course’un teaches’e, instructor’ın teaches’e katılımı kısmi.

Kardinaliteyi ve katılımı tek gösterimde birleştirmenin yolu min..max etiketleridir. Çizginin üstüne yazılan l..h, o varlığın ilişkide en az l, en çok h kez görünebileceğini söyler.

instructor --1..1-- < inst_dept > --0..*-- department
   her hoca tam bir bölümde          bir bölümde sıfır ya da çok hoca

student --0..*-- < takes > --0..*-- course

min = 1 total katılım, min = 0 partial katılım demektir. max = 1 “en çok bir”, * sınırsız.

Zayıf varlıklar (weak entity sets)

Bir dersin şubelerini (section) düşün: CS101’in Fall 2026’daki 1 ve 2 numaralı şubeleri, MA101’in Fall 2026’daki 1 numaralı şubesi. sec_id = 1 tek başına bir şube belirtmez, çünkü birçok dersin 1 numaralı şubesi var. Section’ın kendi başına yeten anahtarı yok: zayıf varlık kümesi (weak entity set).

  • Zayıf varlığı tanımlayan güçlü varlık sahip (owner, identifying entity set): course.
  • Bağlayan ilişki tanımlayıcı ilişki (identifying relationship): sec_course. Çift baklava ile çizilir.
  • Zayıf varlığı sahibi içinde ayırt eden öznitelikler ayırt edici (discriminator, partial key): {sec_id, semester, year}. Kesik altı çizgiyle gösterilir.
  • Zayıf varlığın birincil anahtarı = sahibin PK + discriminator = {course_id, sec_id, semester, year}.
+===============+                   +-----------+
|| section     ||====<< sec_course >>----| course    |
|| - sec_id -  ||                   | _course_id_|
|| - semester -||                   +-----------+
|| - year -    ||
+===============+
  çift kutu: zayıf varlık   çift baklava: tanımlayıcı ilişki   çift çizgi: total katılım

Zayıf varlık sahibine her zaman total katılır ve ilişki sahip tarafında “bir” olur: her şube tam olarak bir derse aittir. Doğrulamada ders silinince şubelerinin de silindiğini (ON DELETE CASCADE) gördük. Şube sahibisiz yaşayamaz.

İPUCU · ne zaman zayıf varlık? Varlığın anlamı tamamen başka bir varlığa bağlıysa (sipariş satırı, bina içindeki oda, dersin şubesi) ve kendi doğal anahtarı yoksa zayıf yap. Kendine özgü bir kimlik numarası verirsen (section_id gibi) artık güçlü varlık olur.

Specialization, generalization, aggregation

Bazı varlık kümelerinin alt grupları ayrı öznitelikler taşır. person genel küme, student (tot_cred) ve instructor (salary) alt kümeler. Yukarıdan aşağı düşünürsen specialization, alt kümelerden ortak üst kümeye çıkarsan generalization. Diyagramda ISA üçgeniyle gösterilir; alt küme üst kümenin tüm özniteliklerini miras alır (attribute inheritance).

İki bağımsız kısıt var:

KısıtSeçeneklerÖrnek
Örtüşmedisjoint: en çok bir alt küme / overlapping: birden çok olabilirAsistan hem student hem instructor: overlapping
Tamlık (completeness)total: her üst varlık bir alt kümede / partial: olmayabilirMisafir konuşmacı ikisi de değil: partial

Aggregation, bir ilişkinin kendisini varlıkmış gibi başka bir ilişkiye bağlamaktır. Örneğin proj_guide ilişkisini bir kutu içine alıp eval_for ilişkisiyle evaluation varlığına bağlarsın: “bu hoca-öğrenci-proje üçlüsünün değerlendirmesi”. Kutuyu almadan yapmak için dörtlü bir ilişki gerekirdi ve gereksiz tekrar olurdu.

Tasarım kararları

  • Varlık mı öznitelik mi? Telefonu sadece numara olarak tutuyorsan öznitelik. Telefona tip, konum gibi kendi bilgileri eklenecekse varlık yap.
  • Varlık mı ilişki mi? Kayıt (enrollment) kendi bilgisini (tarih, ücret) taşıyorsa ve başka şeylere bağlanacaksa varlık olabilir. Sadece “kim neyi aldı” ise ilişki yeter.
  • Gereksizlik (redundancy): instructor’da dept_name özniteliği ve ayrıca inst_dept ilişkisi tutma. Bilgi zaten ilişkide, ikisi çelişebilir.
  • Ternary mi ikili mi? Üçlü bilgi gerçekten birlikteyse (hangi hoca hangi öğrenciye hangi projede) ternary. Yukarıdaki sahte üçlü örneği bunun nedeni.

Sık yapılan hatalar

Yanlış düşünceDoğrusu
phone birden çok değerli ise compositeMultivalued; composite parçalardan oluşur
age’i saklaDerived; date_of_birth sakla, age hesapla
Kardinalite = katılımKardinalite “en çok”, katılım “en az bir zorunlu mu”
Tabloda her ders tek hocalı, demek ki 1:NVeri kuralı ispatlamaz; senaryodaki iş kuralına bak
grade öğrencinin özniteliğiM:N ilişkinin (takes) özniteliği
Zayıf varlığın anahtarı discriminatorOwner PK + discriminator
Zayıf varlık partial katılabilirTanımlayıcı ilişkiye her zaman total katılır
Ternary’yi üç ikiliyle aynen ifade ederimSahte üçlüler oluşabilir, bilgi kaybolur
disjoint ile total aynı şeyBağımsız kısıtlar: örtüşme ve tamlık

Kendini test et

Sınavdaki gibi İngilizce sorular. Önce kâğıt kalemle çöz, sonra cevabı aç.

Soru 1kolay

An instructor can have several phone numbers. In an ER diagram, what kind of attribute is phone?

Cevabı göster
multivalued attribute

Bir hocanın birden fazla değeri olabiliyor, bu yüzden çok değerli öznitelik (multivalued). Diyagramda çift çizgili elips ya da Chen dışı notasyonda {phone} diye gösterilir. Tabloya geçerken ayrı bir tablo olur: inst_phone(inst_id, phone).

Soru 2kolay

The attribute name of student consists of first_name and last_name. What kind of attribute is name?

Cevabı göster
composite attribute

Alt parçalara bölünebilen öznitelik bileşik (composite) özniteliktir. Tablo yaparken genelde sadece yaprak parçalar kolon olur: first_name, last_name.

Soru 3kolay

Student has the stored attribute date_of_birth and the attribute age. What kind of attribute is age, and what is the age of a student born on 2005-11-02 on 2026-10-01?

Cevabı göster
derived attribute, 20

age saklanmaz, date_of_birth ve bugünün tarihinden hesaplanır, yani türetilmiş (derived). 2026 − 2005 = 21, ama doğum günü (2 Kasım) 1 Ekim'de henüz gelmedi, 1 çıkar: 20. Diyagramda kesik çizgili elips ya da age() yazılır.

Soru 4kolay

What is the degree of the relationship set takes between student and course?

Cevabı göster
2 (binary)

Derece (degree), ilişkiye katılan varlık kümesi sayısıdır. takes sadece student ve course'u bağlar: binary. Üç varlık bağlansaydı ternary olurdu.

Soru 5orta

In the sample data, every instructor teaches at most 2 courses and every course is taught by at most 1 instructor. Which mapping cardinality from instructor to course does this instance support, and does the instance prove it?

Cevabı göster
one-to-many (1:N); no, an instance cannot prove a constraint

Bir hocaya birden fazla ders, bir derse en çok bir hoca düşüyor: instructor tarafı 1, course tarafı N. Ama kardinalite bir kuraldır (gerçek dünyadaki iş kuralı). Örnek veri sadece kuralla çelişmediğini gösterir. Yarın iki hocalı bir ders gelirse ilişki M:N olmalıdır; bunu veri değil tasarımcı belirler.

Soru 6orta

In the sample database the course BI100 appears in no teaches row. What does this say about the participation of course in teaches?

Cevabı göster
partial participation

Total katılım her course varlığının en az bir teaches ilişkisinde olmasını ister. BI100 hiçbirinde yok, demek ki course'un katılımı kısmi (partial). Diyagramda tek çizgi; total olsaydı çift çizgi olurdu.

Soru 7orta

In min..max notation the line between instructor and the relationship inst_dept is labeled 1..1. What does this mean?

Cevabı göster
every instructor belongs to exactly one department

min = 1: her hoca en az bir bölümle ilişkili, yani total katılım. max = 1: en fazla bir bölüm. İkisi birlikte "tam olarak bir". Örnek veride bölümü NULL olan hoca yok, kuralla uyumlu.

Soru 8orta

section is a weak entity set owned by course, with discriminator {sec_id, semester, year}. What is the primary key of section?

Cevabı göster
{course_id, sec_id, semester, year}

Zayıf varlığın anahtarı = sahibin (owner) birincil anahtarı + ayırt edici (discriminator). course_id tek başına yetmez (bir dersin birçok şubesi var), sec_id tek başına yetmez (CS101'in de MA101'in de 1 numaralı şubesi var).

Soru 9orta

Why must a weak entity set have total participation in its identifying relationship?

Cevabı göster
because it cannot be identified without its owner

Zayıf varlığın kendi başına anahtarı yok; tanımlanması için sahibinin anahtarına muhtaç. Sahibi olmayan bir section'ı ayırt etmenin yolu yok, bu yüzden her section tam olarak bir course'a bağlı olmalı: total katılım, diyagramda çift çizgi ve çift baklava.

Soru 10zor

Where should the attribute grade be placed: on student, on course, or on the M:N relationship takes? Where could the attribute since of the 1:N relationship advisor (one instructor advises many students) be moved?

Cevabı göster
grade on takes; since can move to student

grade bir öğrenci ile bir dersin çiftine ait. Öğrencide tutsan hangi dersin notu belli değil, derste tutsan hangi öğrencinin belli değil. M:N ilişkinin özniteliği ilişkide kalmak zorunda. 1:N ilişkide ise her öğrencinin tek danışmanı var, since N tarafına (student) taşınabilir.

Soru 11zor

person is specialized into student and instructor. A teaching assistant is both a student and an instructor, and some people (e.g. visiting guests) are neither. Classify the specialization.

Cevabı göster
overlapping, partial

Bir varlık iki alt kümede birden olabiliyorsa overlapping (disjoint değil). Bazı person'lar hiçbir alt kümede değilse completeness kısıtı partial (total değil). Doğrulamada P2 iki alt tabloda da çıktı, P3 hiçbirinde yok.

Soru 12zor

The ternary relationship proj_guide(instructor, student, project) has the triples (I1,S1,P1), (I1,S2,P2), (I2,S1,P2). If you replace it with three binary relationships (instructor-student, student-project, instructor-project) and join them back, how many triples do you get, and which one is spurious?

Cevabı göster
4 triples; spurious: (I1,S1,P2)

İkili çiftler: IS = {I1S1, I1S2, I2S1}, SP = {S1P1, S2P2, S1P2}, IP = {I1P1, I1P2, I2P2}. Üçünü geri birleştirince her çiftin üçünde de bulunduğu üçlüler kalır: (I1,S1,P1), (I1,S1,P2), (I1,S2,P2), (I2,S1,P2). Dört üçlü, ama (I1,S1,P2) aslında yoktu. I1, S1'e P1 projesinde rehberlik ediyor, P2'de değil. Ternary ilişki bu bilgiyi taşır; ikili ilişkiler taşıyamaz.

Doğrulama: Kardinalite ve katılım iddiaları örnek üniversite veritabanında SQL ile sayıldı; section zayıf varlığı, overlapping specialization ve ternary ilişkinin ikili ilişkilere bölünmesi node:sqlite ve JS küme işlemleriyle kurulup denendi (verify/SEN2104/02.mjs, 24 kontrol).

Deftere not kartı

Entity = tek nesne (Ada). Entity set = aynı türden hepsi (student). Öznitelik: simple / composite (name: first,last) / multivalued {phone} / derived age() Relationship set: varlıklar arası bağ. Degree: 2 binary, 3 ternary. M:N ilişkinin özniteliği (grade) ilişkide kalır; 1:N'de N tarafına taşınabilir. Kardinalite: 1:1, 1:N, N:1, M:N. Ok/çizgi yönü notasyona göre değişir, oku dikkatli. Katılım: total = her varlık en az bir ilişkide (çift çizgi), partial = tek çizgi. min..max: 0..* (isteğe bağlı, sınırsız), 1..1 (tam bir tane), 1..* (en az bir). Weak entity: kendi anahtarı yok. PK = owner PK + discriminator. Çift dikdörtgen, çift baklava, total. Specialization (yukarıdan aşağı) / generalization (aşağıdan yukarı), ISA üçgeni. disjoint vs overlapping ; total vs partial (iki bağımsız kısıt) Ternary'yi üç ikiliye bölmek sahte üçlü üretebilir. Örnek veri bir kısıtı ispatlamaz, sadece çürütebilir.