Basit bir banka sistemi modelleyin: - `accounts` tablosu: - `id`, - `owner_id`, - `currency`, - `created_at`. - `transactions` tablosu: - `id`, - `account_id`, - `amount`, - `created_at`. **Gereksinimler:** 1. Gerekli kısıtlamalarla (NOT NULL, FK, `amount` için CHECK) şema oluşturmak için SQL yazın. 2. Sorgu yazın: - `account_id` ile hesabın güncel bakiyesini alın (amount toplamı). 3. Zorluk: borç/alacak desteği (çift kayıt). Temizlik.
sobes.tech yapay zeka
AI'dan gelen yanıt
sql -- 1. Şema oluşturma CREATE TABLE hesaplar ( id SERIAL PRIMARY KEY, owner_id INT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW() );
CREATE TABLE işlemler ( id SERIAL PRIMARY KEY, account_id INT NOT NULL REFERENCES hesaplar(id) ON DELETE CASCADE, amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW() );
-- 2. account_id ile güncel bakiyeyi almak için sorgu SELECT COALESCE(SUM(amount), 0) AS balance FROM işlemler WHERE account_id = $1;
-- 3. Zorluk: borç/alacak desteği (çift kayıt) -- Her işlemin iki kayıttan oluştuğu varsayılır: borç ve alacak -- Bunun için ledger_entries tablosu şu alanlarla eklenebilir: CREATE TABLE ledger_entries ( id SERIAL PRIMARY KEY, transaction_id INT NOT NULL, account_id INT NOT NULL REFERENCES hesaplar(id), amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT fk_transaction FOREIGN KEY (transaction_id) REFERENCES işlemler(id) ON DELETE CASCADE );
-- Artık işlemler tablosu, transfer hakkında genel bilgileri (örneğin, açıklama, tarih) saklar -- Hesap bakiyesi, ledger_entries tablosundaki amount toplamı olarak hesaplanır: SELECT COALESCE(SUM(amount), 0) AS balance FROM ledger_entries WHERE account_id = $1;
"""
Bu şekilde, çift kayıt, ledger_entries tablosunda iki kayıtla sağlanır: biri negatif amount (harcama), diğeri pozitif (kredi). Bu, bankacılık sistemlerinde klasik bir muhasebe yaklaşımıdır.