2011-02-24 63 views
13

Sau khi tìm kiếm một ứng dụng theo dõi tiền/lập ngân sách tối giản, tôi quyết định xây dựng một ứng dụng cho mục đích cá nhân của riêng mình.Thiết kế cơ sở dữ liệu tài chính cá nhân

Tuy nhiên, tôi không chắc chắn với một phần của thiết kế cơ sở dữ liệu. Về cơ bản tại thời điểm này, tôi có một bảng mục nhập rõ ràng lưu trữ dữ liệu về mỗi giao dịch, dù là tín dụng hay nợ, v.v.

Tình trạng khó xử mà tôi có là, tôi không biết liệu tôi có nên tạo một bảng khác để lưu trữ số dư hiện tại của mỗi tài khoản hoặc nếu tôi nên tự động điền số dư đó bằng cách trừ đi các khoản ghi nợ từ các khoản tín dụng.

Một phần của tôi nói rằng khi bảng mục nhập tăng khả năng tạo số dư cho mỗi tài khoản sẽ chậm hơn (có tối ưu hóa sớm được cho là xấu), nhưng cũng có vẻ không cần thiết để thêm bảng khác khi tôi có thể tính toán dữ liệu từ các bảng hiện có.

Cảm ơn

EDIT: Xin lỗi tôi có thể không được rõ ràng, tôi hiểu làm thế nào để thực hiện một trong hai phương pháp của việc tạo ra các số dư tài khoản. Tôi đã tìm thêm những ưu điểm/nhược điểm của một trong hai phương pháp cũng như những gì sẽ là 'thực hành tốt nhất'. Cảm ơn rất nhiều cho các bài trả lời!

+0

nếu bạn sống ở Hoa Kỳ hoặc Canada, có Mint.com ... –

+0

Không, tôi cũng nói rằng tôi muốn thứ gì đó tối giản và nhẹ – Stoosh

+0

Nếu bạn đang dùng mac, bạn có thể thử Squirrel. Kinh nghiệm của tôi là nó nhanh và nhẹ. (http://www.squirrelapp.com/) – KyleWpppd

Trả lời

16

Nếu tôi được thiết kế một ứng dụng kế toán tối giản, tôi sẽ có thể làm điều gì đó như

ledger 
------------- 
    key   INT(12) PRIMARY KEY 
    account_id INT(10) 
    category_id INT(10) 
    trans_type CHAR(3) 
    amount  NUMERIC(10,2) 

account 
------------ 
    account_id INT(10) PRIMARY KEY 
    created  DATETIME 
    name   VARCHAR(32) 
    ... 

category 
------------ 
    category_id INT(10) 
    name   VARCHAR(32) 
    ... 

Cột key sẽ bao gồm một ngày và một giá trị số zero-đệm (tức là 201102230000), nơi cuối cùng 4 chữ số sẽ là id giao dịch hàng ngày. Điều này sẽ hữu ích để theo dõi các giao dịch và trả về một phạm vi, vv Id giao dịch hàng ngày 0000 có thể là số dư tài khoản ở đầu (hoặc kết thúc) trong ngày và id 0001 trở lên là các giao dịch khác.

Cột trans_type sẽ giữ mã giao dịch, chẳng hạn như "DEB" (ghi nợ), "CRE" (tín dụng), "TRA" (chuyển nhượng) và "BAL" (cân bằng), vv

Với một thiết lập như vậy, bạn có thể thực hiện bất kỳ loại truy vấn nào, từ nhận tất cả giao dịch "tín dụng" giữa bất kỳ ngày cụ thể nào, chỉ với số dư tài khoản tại bất kỳ ngày hoặc phạm vi ngày cụ thể nào.

Ví dụ: lấy tất cả các giao dịch tín dụng và thẻ ghi nợ giữa 2011-01-012011-02-23

SELECT ledger.*, account.name, category.name 
    FROM ledger 
    JOIN account 
    ON ledger.account_id = account.account_id 
    JOIN category 
    ON ledger.category_id = category.category_id 
WHERE (ledger.trans_type = "CRE" 
    OR ledger.trans_type = "DEB") 
    AND ledger.key BETWEEN 201101010000 AND 201102239999 
ORDER BY ledger.key ASC 

Ví dụ: lấy tất cả các giao dịch (trừ số dư) giữa 2011-01-012011-02-23 cho tài khoản # 1 (ví dụ: thế chấp)

SELECT ledger.*, account.name, category.name 
    FROM ledger 
    JOIN account 
    ON ledger.account_id = account.account_id 
    JOIN category 
    ON ledger.category_id = category.category_id 
WHERE ledger.trans_type <> "BAL" 
    AND ledger.key BETWEEN 201101010000 AND 201102239999 
    AND account.id = 1 
ORDER BY ledger.key ASC 

Vì vậy, có bạn đi, sự linh hoạt và khả năng mở rộng.

+1

Bất kỳ lý do nào khiến bạn không chỉ có thêm một trường 'được tạo' trong bảng? – Stoosh

+0

@Stoosh, tôi chỉ hiển thị thiết kế cơ sở dữ liệu cơ bản. Bạn có thể có bất kỳ lĩnh vực nào bạn muốn, tôi chỉ tập trung vào vấn đề câu hỏi của bạn ở đây. –

+0

ở đó, tôi đã thêm cột 'đã tạo' :) –

1

Tôi đang thực sự làm việc trên chỉ này ý tưởng trang web ngay bây giờ và cách tôi đã thiết lập cơ sở dữ liệu của tôi là:

TABLE account 
    id 
    account_name 
    current_balance 

TABLE transaction 
    id 
    account_id 
    payee 
    date 
    amount 
    category 

Và bất cứ khi nào một giao dịch mới được thêm vào tôi cập nhật số dư hiện tại của tài khoản.

FYI, tôi hy vọng sẽ khởi chạy trang web của mình trong vòng một tháng và nếu bạn quan tâm đến việc sử dụng trang web của người đó, chỉ cần xem tiểu sử của tôi.

1

Tôi nghĩ một bảng đọc đơn sẽ tốt hơn và cho phép linh hoạt hơn trong tương lai. Bạn cuối cùng có thể theo dõi trung bình cho số dư, tín dụng và ghi nợ.

2

Để có một số cá nhân cơ sở dữ liệu tài chính quan hệ ngày nay đủ nhanh để tính toán số dư của nhiều tài khoản động. Bạn không cần cột để giữ số dư hiện tại. Ngay cả Microsoft Access cũng đủ nhanh. Tôi biết điều này vì tôi đã xây dựng và sử dụng cơ sở dữ liệu tài chính cá nhân trong Access. Nó thậm chí có thể là những gì bạn đang tìm kiếm. Bạn có thể đọc về nó và tải xuống tại số http://maiaco.com/software/ledger/index.php

0

Không lưu trữ giá trị được tính trong bảng trừ khi bạn cần vì lý do hiệu suất. Tôi sẽ sử dụng Chế độ xem để hiển thị các giá trị được tính thay thế.

Các vấn đề liên quan