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
- 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.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
| 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.