Files
hMarket/docs/database-setup.md

225 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🗄️ Veritabanı Kurulum Talimatları
## MariaDB Kurulumu
### Windows için MariaDB Kurulumu
1. **MariaDB İndirme**
- [MariaDB resmi sitesinden](https://mariadb.org/download/) Windows sürümünü indirin
- MSI installer'ı çalıştırın
2. **Kurulum Adımları**
```
- "Custom" kurulum seçin
- Root şifresini belirleyin (güvenli bir şifre seçin)
- Port: 3306 (varsayılan)
- Character Set: UTF8
```
3. **Servis Kontrolü**
```bash
# Servisin çalışıp çalışmadığını kontrol edin
net start MariaDB
```
### MariaDB Veritabanı Oluşturma
1. **MariaDB'ye Bağlanma**
```bash
mysql -u root -p
```
2. **Veritabanı Oluşturma**
```sql
-- HMarket veritabanını oluştur
CREATE DATABASE hmarket CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Uygulama için kullanıcı oluştur
CREATE USER 'hmarket_user'@'localhost' IDENTIFIED BY 'güvenli_şifre_buraya';
-- Kullanıcıya yetki ver
GRANT ALL PRIVILEGES ON hmarket.* TO 'hmarket_user'@'localhost';
-- Yetkileri yenile
FLUSH PRIVILEGES;
-- Çıkış
EXIT;
```
## Backend Kurulumu
### 1. Bağımlılıkları Yükle
```bash
cd backend
npm install
```
### 2. Environment Dosyasını Ayarla
```bash
# .env.example dosyasını .env olarak kopyala
copy .env.example .env
# .env dosyasını düzenle ve veritabanı bilgilerini gir
```
### 3. .env Dosyası Örnek Konfigürasyonu
```env
# Veritabanı bağlantısı
DATABASE_URL="mysql://hmarket_user:güvenli_şifre_buraya@localhost:3306/hmarket"
# JWT ayarları
JWT_SECRET=super-gizli-jwt-anahtari-buraya-yazin
JWT_EXPIRES_IN=7d
# Sunucu ayarları
PORT=3001
NODE_ENV=development
CORS_ORIGIN=http://localhost:3000
```
### 4. Prisma Kurulumu ve Veritabanı Migrasyonu
```bash
# Prisma client'ı oluştur
npm run db:generate
# Veritabanı şemasını uygula
npm run db:push
# Başlangıç verilerini yükle
npm run db:seed
```
### 5. Sunucuyu Başlat
```bash
# Geliştirme modu
npm run dev
# Üretim modu
npm start
```
## Veritabanı Şemasııklaması
### Ana Tablolar
#### 1. **users** - Kullanıcılar
- Kullanıcı bilgileri, kimlik doğrulama
- Admin yetkileri
- Profil bilgileri
#### 2. **shopping_lists** - Alışveriş Listeleri
- Liste bilgileri (isim, açıklama, renk)
- Sahiplik bilgisi
- Aktiflik durumu
#### 3. **list_members** - Liste Üyeleri
- Çoklu kullanıcı desteği
- Rol tabanlı yetkilendirme (admin, member, viewer)
- Katılım tarihi
#### 4. **products** - Ürünler
- Ürün bilgileri (isim, barkod, kategori)
- Marka bilgisi
- Resim desteği
#### 5. **list_items** - Liste Öğeleri
- Listedeki ürünler
- Miktar, birim, fiyat bilgileri
- Satın alma durumu
- Öncelik seviyeleri
#### 6. **categories** - Kategoriler
- Ürün kategorileri
- Icon ve renk desteği
- Sıralama
#### 7. **price_history** - Fiyat Geçmişi
- Ürün fiyat takibi
- Mağaza ve konum bilgisi
- Zaman serisi verileri
#### 8. **notifications** - Bildirimler
- Push notification desteği
- Bildirim türleri
- Okunma durumu
#### 9. **activities** - Aktivite Logu
- Gerçek zamanlı güncellemeler için
- Kullanıcı aktiviteleri
- JSON veri desteği
### İlişkiler
```
User (1) -----> (N) ShoppingList (sahiplik)
User (N) <----> (N) ShoppingList (üyelik - ListMember tablosu üzerinden)
ShoppingList (1) -----> (N) ListItem
Product (1) -----> (N) ListItem
Product (1) -----> (N) PriceHistory
Category (1) -----> (N) Product
User (1) -----> (N) Notification
User (1) -----> (N) Activity
ShoppingList (1) -----> (N) Activity
```
## Performans Optimizasyonları
### İndeksler
Prisma otomatik olarak aşağıdaki indeksleri oluşturur:
- Primary key'ler
- Unique constraint'ler
- Foreign key'ler
### Ek Optimizasyonlar
```sql
-- Sık kullanılan sorgular için ek indeksler
CREATE INDEX idx_list_items_list_purchased ON list_items(listId, isPurchased);
CREATE INDEX idx_activities_list_created ON activities(listId, createdAt);
CREATE INDEX idx_price_history_product_created ON price_history(productId, createdAt);
```
## Yedekleme
### Otomatik Yedekleme Script'i
```bash
# Günlük yedekleme
mysqldump -u hmarket_user -p hmarket > backup_$(date +%Y%m%d).sql
# Haftalık tam yedekleme
mysqldump -u hmarket_user -p --all-databases > full_backup_$(date +%Y%m%d).sql
```
## Sorun Giderme
### Yaygın Hatalar
1. **Bağlantı Hatası**
```
Error: P1001: Can't reach database server
```
- MariaDB servisinin çalıştığını kontrol edin
- Bağlantı bilgilerini doğrulayın
2. **Yetki Hatası**
```
Error: Access denied for user
```
- Kullanıcı yetkilerini kontrol edin
- Şifrenin doğru olduğundan emin olun
3. **Şema Hatası**
```
Error: Table doesn't exist
```
- `npm run db:push` komutunu çalıştırın
- Veritabanının doğru oluşturulduğunu kontrol edin
### Log Kontrolü
```bash
# MariaDB loglarını kontrol et
tail -f /var/log/mysql/error.log
# Uygulama loglarını kontrol et
npm run dev
```