Ana içeriğe geç

Fiziksel Veri Modeli Dokümanı

ISO/IEC 15504 SPICE | ENG.5 Tasarım gereksinimlerinin karşılanması beklenmektedir.

İlgili Jira Task: PCR-13

1. Veri Modeli Genel Bakış

1.1. Fiziksel Veri Modeli Diagramı

    USER {
        int Id PK
        uuid Uid
        string Name
        string Email
        string Password
        bool IsLogin
    }

    CUSTOMER {
        int Id PK
        uuid Uid
        string Name
        int UserId FK
    }

    PHONE {
        uuid Uid PK
        string Number
        int CustomerId FK
    }

    CALL {
        uuid Uid PK
        datetime StartTime
        datetime EndTime
        uuid PhoneUid FK
        int CustomerId FK
    }

1.2. Veri Modeli Prensipleri

  • Normalizasyon: 3NF
  • Denormalizasyon: Gerekli değil
  • Data Integrity: Primary/Foreign key kısıtları ile referential integrity
  • Scalability: İhtiyaç halinde dikey/yatay ölçeklendirme
  • Performance: Uygun indeksleme ve sorgu optimizasyonu

1.3. Database Platform

  • DBMS: Microsoft SQL Server (MSSQL)
  • Version: SQL Server 2019+
  • Encoding: UTF-8
  • Collation: Turkish_CI_AS
  • Time Zone: UTC

2. Schema Yapısı

2.1. Database Schemas

Schema Name Purpose Owner Description
dbo Uygulama verileri app_user Çekirdek iş tabloları

2.2. Naming Conventions

  • Tables: PascalCase (örn: USER, CUSTOMER, PHONE, CALL)
  • Columns: PascalCase (örn: UserId, CustomerId)
  • Primary Keys: Id veya Uid
  • Foreign Keys: ReferencedTableId/Uid
  • Indexes: IX_Table_Columns
  • Constraints: CK_Table_Column

3. Ana Tablolar (Core Tables)

3.1. USER

Column Name Data Type (MSSQL) Null Default Description
Id int No IDENTITY(1,1) Primary key
Uid uniqueidentifier No NEWID() Benzersiz kimlik
Name nvarchar(100) No - Kullanıcı adı
Email nvarchar(255) No - Kullanıcı e-posta
Password nvarchar(255) No - Parola (hash)
IsLogin bit No 0 Oturum durumu

Constraints: - PK: PK_User_Id (Id)

Indexes: - Clustered: PK_User_Id (Id) - Non-Clustered (Unique): UK_User_Email (Email)

3.2. CUSTOMER

Column Name Data Type (MSSQL) Null Default Description
Id int No IDENTITY(1,1) Primary key
Uid uniqueidentifier No NEWID() Benzersiz kimlik
Name nvarchar(150) No - Müşteri adı
UserId int No - FK → USER.Id

Constraints: - PK: PK_Customer_Id (Id) - FK: FK_Customer_UserId (UserId → USER.Id)

Indexes: - Clustered: PK_Customer_Id (Id) - Non-Clustered: IX_Customer_UserId (UserId)

3.3. PHONE

Column Name Data Type (MSSQL) Null Default Description
Uid uniqueidentifier No NEWID() Primary key
Number nvarchar(20) No - Telefon numarası
CustomerId int No - FK → CUSTOMER.Id

Constraints: - PK: PK_Phone_Uid (Uid) - FK: FK_Phone_CustomerId (CustomerId → CUSTOMER.Id)

Indexes: - Clustered: PK_Phone_Uid (Uid) - Non-Clustered (Unique): UK_Phone_Number_Customer (Number, CustomerId) - Non-Clustered: IX_Phone_CustomerId (CustomerId)

3.4. CALL

Column Name Data Type (MSSQL) Null Default Description
Uid uniqueidentifier No NEWID() Primary key
StartTime datetime2(0) No SYSUTCDATETIME() Arama başlangıcı
EndTime datetime2(0) No - Arama bitişi
PhoneUid uniqueidentifier No - FK → PHONE.Uid
CustomerId int No - FK → CUSTOMER.Id

Constraints: - PK: PK_Call_Uid (Uid) - FK: FK_Call_PhoneUid (PhoneUid → PHONE.Uid) - FK: FK_Call_CustomerId (CustomerId → CUSTOMER.Id)

Indexes: - Clustered: PK_Call_Uid (Uid) - Non-Clustered: IX_Call_PhoneUid_StartTime (PhoneUid, StartTime) - Non-Clustered: IX_Call_CustomerId_StartTime (CustomerId, StartTime)

4. İlişkiler (Relationships)

4.1. Ana İlişkiler

Parent Table Child Table Relationship Type Foreign Key Description
USER CUSTOMER One-to-Many UserId Kullanıcı → Müşteri
CUSTOMER PHONE One-to-Many CustomerId Müşteri → Telefon
PHONE CALL One-to-Many PhoneUid Telefon → Arama
CUSTOMER CALL One-to-Many CustomerId Müşteri → Arama

4.2. Referential Integrity

  • Cascade Delete: Yok
  • Restrict Delete: Tüm FK'larda
  • Set Null: Yok

5. İndeksler ve Performans

5.1. Primary Keys

Table Primary Key Type Description
USER Id Clustered Integer PK
CUSTOMER Id Clustered Integer PK
PHONE Uid Clustered UUID PK
CALL Uid Clustered UUID PK

5.2. Unique Indexes

Table Columns Index Name Purpose
USER Email UK_User_Email Kullanıcı e-postası benzersizliği
PHONE Number, CustomerId UK_Phone_Number_Customer Müşteri başına numara tekilliği

5.3. Composite Indexes

Table Columns Index Name Usage Pattern
CALL PhoneUid, StartTime IX_Call_PhoneUid_StartTime Telefon bazlı arama listeleri
CALL CustomerId, StartTime IX_Call_CustomerId_StartTime Müşteri bazlı arama geçmişi

6. Veri Tipleri ve Kısıtlamalar

6.1. Standart Veri Tipleri

Business Type SQL Server PostgreSQL MySQL Description
ID bigint bigserial bigint Primary key
Short Text nvarchar(255) varchar(255) varchar(255) Names, emails
Long Text nvarchar(max) text text Descriptions
Money decimal(18,2) decimal(18,2) decimal(18,2) Currency values
Date date date date Date only
DateTime datetime2 timestamp datetime Date and time
Boolean bit boolean boolean True/false values

7. Güvenlik ve Erişim Kontrolü

7.1. Database Users ve Roller

User/Role Purpose Permissions Tables
app_user Application connection SELECT, INSERT, UPDATE, DELETE Uygulama tabloları
readonly_user Reporting/BI SELECT Tüm tablolar
migration_user Schema changes DDL, DML Tüm tablolar

7.2. Sensitive Data Protection

  • Encryption at Rest: TDE (uygunsa)
  • Column Encryption: PII için kolon şifreleme (uygunsa)
  • Masked Data: Non-prod ortamlar için maskeleme
  • Audit Trail: Hassas tablolarda audit

8. Backup ve Recovery

8.1. Backup Strategy

Backup Type Frequency Retention Recovery Point
Full Backup Weekly 1 month Weekly point
Differential Daily 1 week Daily point
Transaction Log 15 minutes 1 week 15 min point

8.2. Recovery Scenarios

  • Point-in-Time Recovery: 1 hafta pencerede
  • Table Recovery: Tekil tablo geri yükleme
  • Disaster Recovery: Bölge-dışı yedeklerden dönüş
  • Testing: Aylık geri yükleme testleri

9. Monitoring ve Maintenance

9.1. Performance Monitoring

Metric Threshold Alert Action
CPU Usage >80% Warning Query optimization
Memory Usage >85% Critical Add memory
Disk Space >90% Critical Add storage
Slow Queries >5 seconds Warning Index optimization

9.2. Maintenance Tasks

  • Index Maintenance: Haftalık rebuild/reorganize
  • Statistics Update: Günlük otomatik güncelleme
  • Integrity Checks: Haftalık CHECKDB
  • Cleanup Tasks: Eski veri arşiv/temizlik

10. Migration ve Deployment

10.1. Schema Migration

  • Migration Tool: Entity Framework/Flyway/Liquibase
  • Version Control: Git tabanlı şema versiyonlama
  • Rollback Strategy: Geri alma script'leri
  • Testing: Staging üzerinde migration testleri

Not: Bu doküman Proje Dökümantasyon Süreci standartlarına uygun olarak hazırlanmış ve ISO/IEC 15504 SPICE | ENG.5 Tasarım gereksinimlerini karşılamaktadır.