CREATE DATABASE electronic_bank;
USE electronic_bank;
-- جدول مشتریان
CREATE TABLE Customers (
customer_id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
national_id CHAR(10) UNIQUE NOT NULL,
birth_date DATE NOT NULL,
phone VARCHAR(15) NOT NULL,
email VARCHAR(100),
address TEXT,
registration_date DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- جدول حسابهای بانکی
CREATE TABLE Accounts (
account_id INT PRIMARY KEY,
customer_id INT NOT NULL,
account_type ENUM('جاری', 'قرضالحسنه', 'سپرده کوتاه مدت', 'سپرده بلند مدت') NOT NULL,
account_number CHAR(16) UNIQUE NOT NULL,
balance DECIMAL(15, 2) DEFAULT 0.00,
opening_date DATETIME DEFAULT CURRENT_TIMESTAMP,
status ENUM('فعال', 'مسدود', 'بسته') DEFAULT 'فعال',
FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);
-- جدول کارتهای بانکی
CREATE TABLE Cards (
card_id INT PRIMARY KEY,
account_id INT NOT NULL,
card_number CHAR(16) UNIQUE NOT NULL,
card_type ENUM('بدهکار', 'اعتباری', 'پیشپرداخت') NOT NULL,
expiry_date CHAR(5) NOT NULL,
cvv2 CHAR(4) NOT NULL,
issue_date DATETIME DEFAULT CURRENT_TIMESTAMP,
status ENUM('فعال', 'مسدود', 'منقضی') DEFAULT 'فعال',
daily_limit DECIMAL(15, 2),
FOREIGN KEY (account_id) REFERENCES Accounts(account_id)
);
-- جدول تراکنشها
CREATE TABLE Transactions (
transaction_id INT PRIMARY KEY,
source_account_id INT,
destination_account_id INT,
amount DECIMAL(15, 2) NOT NULL,
transaction_type ENUM('واریز', 'برداشت', 'انتقال', 'پرداخت قبض') NOT NULL,
transaction_date DATETIME DEFAULT CURRENT_TIMESTAMP,
description TEXT,
status ENUM('موفق', 'ناموفق', 'در انتظار') DEFAULT 'موفق',
reference_id VARCHAR(50),
FOREIGN KEY (source_account_id) REFERENCES Accounts(account_id),
FOREIGN KEY (destination_account_id) REFERENCES Accounts(account_id)
);
-- جدول پرداختهای قبض
CREATE TABLE BillPayments (
payment_id INT PRIMARY KEY,
account_id INT NOT NULL,
bill_type ENUM('برق', 'آب', 'گاز', 'تلفن', 'موبایل', 'اینترنت') NOT NULL,
bill_id VARCHAR(50) NOT NULL,
amount DECIMAL(15, 2) NOT NULL,
payment_date DATETIME DEFAULT CURRENT_TIMESTAMP,
reference_code VARCHAR(50) NOT NULL,
FOREIGN KEY (account_id) REFERENCES Accounts(account_id)
);
-- درج دادههای نمونه
-- مشتریان
INSERT INTO Customers VALUES
(1001, 'محمد', 'رضایی', '0123456789', '1980-05-15', '09121234567', 'm.rezaei@example.com', 'تهران، خیابان آزادی', '2020-01-10'),
(1002, 'فاطمه', 'محمدی', '1234567890', '1985-08-22', '09129876543', 'f.mohammadi@example.com', 'مشهد، بلوار وکیلآباد', '2020-02-15'),
(1003, 'علی', 'کریمی', '2345678901', '1990-11-30', '09123456789', 'a.karimi@example.com', 'اصفهان، خیابان چهارباغ', '2020-03-20');
-- حسابها
INSERT INTO Accounts VALUES
(2001, 1001, 'جاری', '6037991234567890', 15000000.00, '2020-01-10', 'فعال'),
(2002, 1001, 'قرضالحسنه', '6037991234567891', 5000000.00, '2020-01-10', 'فعال'),
(2003, 1002, 'سپرده کوتاه مدت', '6037991234567892', 25000000.00, '2020-02-15', 'فعال'),
(2004, 1003, 'جاری', '6037991234567893', 8000000.00, '2020-03-20', 'فعال');
-- کارتها
INSERT INTO Cards VALUES
(3001, 2001, '6037997512345678', 'بدهکار', '05/28', '1234', '2020-01-15', 'فعال', 5000000.00),
(3002, 2003, '6037997523456789', 'اعتباری', '08/29', '5678', '2020-02-20', 'فعال', 10000000.00),
(3003, 2004, '6037997534567890', 'بدهکار', '11/30', '9012', '2020-03-25', 'فعال', 3000000.00);
-- تراکنشها
INSERT INTO Transactions VALUES
(4001, NULL, 2001, 1000000.00, 'واریز', '2023-01-05 10:15:30', 'واریز حقوق', 'موفق', 'REF123456'),
(4002, 2001, 2003, 500000.00, 'انتقال', '2023-01-10 14:20:45', 'انتقال به حساب دوست', 'موفق', 'REF654321'),
(4003, 2001, NULL, 200000.00, 'برداشت', '2023-01-15 09:30:15', 'برداشت از عابربانک', 'موفق', 'REF789012');
-- پرداخت قبض
INSERT INTO BillPayments VALUES
(5001, 2001, 'برق', '123456789', 150000.00, '2023-01-20 11:45:00', 'BP123456789');