Əsas məzmuna keçin

Entity-Relationship (E-R) Diaqramları

Entity-Relationship (E-R) diaqramları verilənlər bazası dizaynı üçün ən mühüm alətlərdən biridir. Bu diaqramlar real dünyada mövcud olan obyektlər (entities), onların xüsusiyyətləri (attributes) və aralarındaki əlaqələri (relationships) vizual şəkildə təsvir edir.

E-R diaqramları verilənlər bazası dizaynının konseptual mərhələsində istifadə olunur və mürəkkəb verilənlər strukturlarının anlaşılmasını, planlaşdırılmasını və kommunikasiya edilməsini asanlaşdırır. Bu diaqramlar həmçinin mövcud sistemlərin analizi və təkmilləşdirilməsi üçün də çox faydalıdır.

E-R Diaqramının Əsas Komponentləri

1. Entity (Varliq)

Entity real dünyada mövcud olan və haqqında məlumat saxlanmalı olan obyektdir. Məsələn: Müştəri, Məhsul, Sifariş, Şirkət və s.

Xüsusiyyətləri:

  • Düzbucaqlı formada təsvir edilir
  • Adı böyük hərflərlə yazılır
  • Əsas ad (noun) olmalıdır
  • Müxtəlif nümunələri ola bilər

2. Attribute (Xüsusiyyət)

Attribute entity-nin xarakteristikasını və ya xüsusiyyətini təsvir edir.

Attribute növləri:

  • Simple Attribute: Sadə, bölünməz xüsusiyyət (Ad, Yaş)
  • Composite Attribute: Mürəkkəb, bölünə bilən (Tam Ad = Ad + Soyad)
  • Derived Attribute: Hesablanan xüsusiyyət (Yaş = İndiki Tarix - Doğum Tarixi)
  • Multi-valued Attribute: Çoxlu dəyərli (Telefon nömrələri)
  • Key Attribute: Unikal identifikator (ID, E-mail)

3. Relationship (Əlaqə)

İki və ya daha çox entity arasında olan əlaqəni təsvir edir.

Relationship növləri:

  • One-to-One (1:1): Hər entity digərindən yalnız bir nümunə ilə əlaqəli
  • One-to-Many (1:N): Bir entity digərindən çoxlu nümunə ilə əlaqəli
  • Many-to-Many (M:N): Hər iki entity çoxlu nümunələrlə əlaqəli

4. Cardinality (Kardinalite)

Relationship-də iştirak edən entity nümunələrinin sayını göstərir.

E-R Diaqram Notasiyaları

Chen Notasiyası (Klassik)

  • Entity: Düzbucaqlı
  • Attribute: Oval
  • Relationship: Romb
  • Primary Key: Altı xəttli attribute
  • Derived Attribute: Qırıqlı xəttli oval

Crow's Foot Notasiyası (Müasir)

  • Entity: Düzbucaqlı cədvəl
  • Relationship: Xətlər və simvollar
  • One: Düz xətt
  • Many: Qarğa ayağı simvolu

Praktik Nümunə: E-ticarət Sistemi

Sadə E-ticarət E-R Diaqramı

erDiagram
CUSTOMER {
int customer_id PK
string first_name
string last_name
string email UK
string phone
date registration_date
}

PRODUCT {
int product_id PK
string product_name
text description
decimal price
int stock_quantity
int category_id FK
}

CATEGORY {
int category_id PK
string category_name
text description
}

ORDER {
int order_id PK
int customer_id FK
datetime order_date
decimal total_amount
string status
text shipping_address
}

ORDER_ITEM {
int order_item_id PK
int order_id FK
int product_id FK
int quantity
decimal unit_price
}

CUSTOMER ||--o{ ORDER : places
ORDER ||--o{ ORDER_ITEM : contains
PRODUCT ||--o{ ORDER_ITEM : "ordered in"
CATEGORY ||--o{ PRODUCT : categorizes

Mürəkkəb E-ticarət E-R Diaqramı

erDiagram
CUSTOMER {
int customer_id PK
string first_name
string last_name
string email UK
string phone
date birth_date
string gender
date registration_date
boolean is_active
}

ADDRESS {
int address_id PK
int customer_id FK
string address_type
string street_address
string city
string state
string postal_code
string country
boolean is_default
}

PRODUCT {
int product_id PK
string product_name
string sku UK
text description
decimal price
decimal cost_price
int stock_quantity
int min_stock_level
int category_id FK
int supplier_id FK
date created_date
boolean is_active
}

CATEGORY {
int category_id PK
string category_name
text description
int parent_category_id FK
int sort_order
}

SUPPLIER {
int supplier_id PK
string company_name
string contact_person
string email
string phone
text address
string tax_number
}

ORDER {
int order_id PK
string order_number UK
int customer_id FK
int shipping_address_id FK
int billing_address_id FK
datetime order_date
decimal subtotal
decimal tax_amount
decimal shipping_cost
decimal total_amount
string status
string payment_method
datetime shipped_date
datetime delivered_date
}

ORDER_ITEM {
int order_item_id PK
int order_id FK
int product_id FK
int quantity
decimal unit_price
decimal total_price
}

REVIEW {
int review_id PK
int product_id FK
int customer_id FK
int rating
text review_text
datetime review_date
boolean is_verified
}

WISHLIST {
int wishlist_id PK
int customer_id FK
int product_id FK
datetime added_date
}

CART {
int cart_id PK
int customer_id FK
int product_id FK
int quantity
datetime added_date
datetime updated_date
}

CUSTOMER ||--o{ ADDRESS : "has"
CUSTOMER ||--o{ ORDER : "places"
CUSTOMER ||--o{ REVIEW : "writes"
CUSTOMER ||--o{ WISHLIST : "creates"
CUSTOMER ||--o{ CART : "maintains"

ORDER ||--|| ADDRESS : "ships to"
ORDER ||--|| ADDRESS : "bills to"
ORDER ||--o{ ORDER_ITEM : "contains"

PRODUCT ||--o{ ORDER_ITEM : "ordered in"
PRODUCT ||--o{ REVIEW : "receives"
PRODUCT ||--o{ WISHLIST : "added to"
PRODUCT ||--o{ CART : "added to"
PRODUCT }o--|| CATEGORY : "belongs to"
PRODUCT }o--|| SUPPLIER : "supplied by"

CATEGORY ||--o{ CATEGORY : "parent of"

E-R Diaqram Yaratma Prosesi

1. Tələblərin Analizi

  • Biznes tələblərini anlayın
  • Domain ekspertləri ilə məsləhətləşin
  • Məlumat axınlarını müəyyənləşdirin

2. Entity-lərin Müəyyənləşdirilməsi

  • Məlumat saxlanmalı olan əsas obyektləri tapın
  • Entity adlarını müəyyənləşdirin
  • Entity-lər arasında fərqləri anlayın

3. Attribute-ların Müəyyənləşdirilməsi

  • Hər entity üçün xüsusiyyətləri siyahıya alın
  • Primary key-ləri müəyyənləşdirin
  • Required və optional field-ləri fərqləndirin

4. Relationship-lərin Qurulması

  • Entity-lər arasında əlaqələri müəyyənləşdirin
  • Cardinality-ni təyin edin
  • Foreign key-ləri müəyyənləşdirin

5. Normalizasiya

  • Redundancy-ni aradan qaldırın
  • Normal formaları tətbiq edin
  • Performance-ı nəzərə alın

Advanced Konceptlər

Weak Entity (Zəif Entity)

  • Müstəqil mövcud ola bilməyən entity
  • Qoşa xəttli düzbucaqlı ilə gösterilir
  • İkili xəttli romb ilə strong entity-yə bağlanır

ISA Hierarchy (Inheritance)

  • Ümumiləşdirmə və ixtisaslaşdırma
  • Supertype və subtype entity-lər
  • Üçbucaq simvolu ilə gösterilir

Aggregation

  • Relationship-lərin entity kimi istifadəsi
  • Mürəkkəb strukturların təsviri
  • Qoşa xəttli romb

E-R Diaqramdan Relational Schema-ya Çevrilmə

Entity Çevrilməsi

-- CUSTOMER entity
CREATE TABLE Customer (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
phone VARCHAR(20),
registration_date DATE DEFAULT CURRENT_DATE
);

One-to-Many Relationship

-- ORDER entity with foreign key
CREATE TABLE Order (
order_id INT PRIMARY KEY,
customer_id INT NOT NULL,
order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
total_amount DECIMAL(10,2),
FOREIGN KEY (customer_id) REFERENCES Customer(customer_id)
);

Many-to-Many Relationship

-- ORDER_ITEM junction table
CREATE TABLE Order_Item (
order_item_id INT PRIMARY KEY,
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
unit_price DECIMAL(10,2),
FOREIGN KEY (order_id) REFERENCES Order(order_id),
FOREIGN KEY (product_id) REFERENCES Product(product_id)
);

E-R Diaqramların Üstünlükləri

1. Vizual Təqdimat

  • Mürəkkəb strukturları sadələşdirir
  • Texniki olmayan şəxslər üçün anlaşıqlıdır
  • Komanda üzvləri arasında kommunikasiyanı asanlaşdırır

2. Dizayn Doğruluğu

  • Verilənlər redundancy-sini azaldır
  • Data integrity-ni artırır
  • Normalizasiya prinsiplərinin tətbiqini dəstəkləyir

3. Dokumentasiya

  • Sistemin struktur dokumentasiyası
  • Gələcək dəyişikliklər üçün əsas
  • Knowledge transfer üçün faydalı

Ən Yaxşı Təcrübələr

1. Adlandırma Konvensiyaları

✅ Düzgün:
- Entity adları: CUSTOMER, ORDER, PRODUCT
- Attribute adları: customer_id, first_name, order_date
- Relationship adları: places, contains, belongs_to

❌ Yanlış:
- Entity adları: customer, Orders, product_table
- Attribute adları: custID, firstName, OrderDate
- Relationship adları: rel1, connection, link

2. Cardinalit və Participation

✅ Düzgün:
- (1,1): Total participation, exactly one
- (0,1): Partial participation, at most one
- (1,N): Total participation, at least one
- (0,N): Partial participation, zero or more

❌ Yanlış:
- Qeyri-dəqiq cardinality təyini
- Participation constraints-in yoxlanmaması

3. Normalizasiya

✅ 1NF: Atomic values, no repeating groups
✅ 2NF: Remove partial dependencies
✅ 3NF: Remove transitive dependencies
✅ BCNF: Every determinant is a candidate key

4. Performance Nəzərə Alma

  • Çox istifadə edilən query-lər üçün denormalization
  • Index strategiyaları
  • Partitioning imkanları

Çətinliklər və Həllər

1. Mürəkkəb Business Logic

Problem: Çox mürəkkəb business rule-lar Həll: Constraint və trigger istifadəsi

2. Performance Issues

Problem: Normalizasiya səbəbindən yavaş query-lər Həll: Strategik denormalization

3. Scalability

Problem: Böyük data həcmləri Həll: Sharding və partitioning

Nəticə

E-R diaqramları verilənlər bazası dizaynının əsasını təşkil edir və uğurlu məlumat sistemlərinin yaradılması üçün vacibdir. Düzgün hazırlanmış E-R diaqramı:

  • Məlumat strukturunu aydın şəkildə təsvir edir
  • Data integrity-ni təmin edir
  • Gələcək genişlənmələr üçün əsas yaradır
  • Komanda üzvləri arasında ümumi anlayış formalaşdırır

Modern verilənlər bazası dizaynında E-R diaqramları hələ də ən effektiv və geniş istifadə edilən alətlərdən biridir.