住房协会管理系统数据库结构

时间:2016-09-10 10:40:11

标签: mysql sql database database-design

昨天我正在为住房社会设计计费结构我用Google搜索并经历了银行结算结构并设计了我的数据库结构,但我不确定这是否正确。所以我将我的结算数据库结构。

请告诉我,如果在我的数据库结构中必须进行任何更改或任何更改,我是否错了。

还有一个问题,我必须发布社会平衡(借记,贷记),例如费用Bldg保险和Adv板囤积等收入,也不确定余额审计跟踪(在交易ID的单独表的交易表中)作为FK)。

请注意,默认情况下,所有表都会创建,修改时间,通过和IP地址

表格结算表

id   | description                        |  amount  | Bill Month  | userId   | societyId 
 1   | Maint Chrg 1000 sqft x 5 per sqft  |  5000    | Aug-16      | 1001     |  101      
 2   | Water Charges                      |   200    | Aug-16      | 1001     |  101       
 3   | Construction Charges               |   300    | Aug-16      | 1001     |  101
 4   | Reserved Parking chrgs             |   500    | Aug-16      | 1001     |  101

表帐户

id   | balance(current bal) |  societyId  | modifiedTime         |
 1   | -6000                |   101       | 2016-01-01 21:01:01  |
 2   | -5000                |   101       | 2016-01-01 21:01:01  |
 3   | 1000                 |   101       | 2016-01-01 21:01:01  | 

表格交易

id  |  amount |  balance | trans_type | trans_time          | account_id | 
 1  |  6000   |   0      |    1       | 2016-01-01 21:01:01 | 1          | 
 2  |  5500   | -6000    |    1       | 2016-02-01 21:01:01 | 2          | 

tran_type :- 1 = Payment by user, 2 = Income to society, 3 = Expense to society

表map_account_user

map_id | account_id | user_id
 1     |  2         | 1001

如果帐户映射不存在,则表示它是社团帐户而非用户帐户。

参考: -

billing banking desing

banking project sample

4 个答案:

答案 0 :(得分:1)

我对在实体中存储聚合时犹豫不决。除非总计很难计算,否则你应该通过检查细节来解释这些。

答案 1 :(得分:0)


  

非常感谢您的努力。您对银行系统的参考确实是一种最佳方法。如果您觉得对您有所帮助,我想为您提供一些可能对您有所帮助的想法。

让我们开始,
如果您使用描述栏的数据 -
{水费
施工费用
预留停车场chrgs}
 作为一个新列,您的行数将减少,因为您可以进行有效的数据维护。对于每个userId,您可以拥有一行数据而不是维护四行。请验证以下提供的示例。 对于每平方英尺,您可以单独设置描述列。

id | userId | societyId | BillMonth | MaintChrg | WaterCharges | ConstructionCharges | ReservedParkingCharges | Description
1  | 1001   | 101       | Aug-16    | 5000      | 200          | 300                  | 500                   |  Maint Chrg 1000 sqft x 5 per sqft
2  | 1002   | 101       | Aug-16    | 4000      | 200          | 300                  | 500                   |  Maint Chrg 900 sqft x 5 per sqft
3  | 1003   | 102       | Aug-16    | 5000      | 200          | 300                  | 500                   |  Maint Chrg 900 sqft x 5 per sqft

您对借记和贷记使用有疑问,
借记作为费用的保险金 作为Adv董事会囤积的信用 您还可以添加其他列,例如用户名,人口数,电费等。, 希望它对你有用。如果您需要更多说明,请发表评论

答案 2 :(得分:0)

我假设你正在设计一个关系数据库。在关系数据库中,您normalize数据。

我无法关注您的数据库设计,因为您有太多不同的字段,称为id。每个id字段都应该有一个唯一的名称,这样人们就可以知道不同的id字段代表什么。

让我们从Transaction表开始。通常表名是单数。我将表名和列名大写。您不必遵循该惯例。

Transaction
-----------
Transaction ID
Transaction Type
User ID
Society Account
Transaction Amount
Transaction Time Stamp
...

交易ID是一个自动递增的整数。它也是Transaction表的主要(聚类)键。交易类型是1 =用户付款,2 =社会收入,3 =社会支出。我不确定交易类型1和交易类型2之间的区别。

填写用户ID或社会帐户列。对于事务类型1填写用户ID列,为事务类型2和3填写社会帐户列。未填写列设置为空。

交易金额始终为正值。您的代码将从交易类型3的社会账户中扣除交易金额。

您将为(用户ID,交易时间戳降序,交易ID)和(社会帐户,交易时间戳降序,交易ID)的唯一索引创建唯一索引。这使您可以快速获得给定月份的用户或社会帐户的所有交易。

接下来,让我们看一下UserAccountBalance表。

UserAccountBalance
------------------
User ID
Balance Year and Month
Balance Amount
...

此表的主键是(用户ID,余额年份和月份降序)。您可以为每个用户ID维护每个月的历史余额。这允许审计员通过对Transaction表运行查询来验证余额。

接下来,让我们看一下SocietyAccountBalance表。

SocietyAccountBalance
---------------------
Society Account
Balance Year and Month
Balance Amount
...

此表类似于UserAccountBalance表,但适用于Society帐户。

接下来,让我们看一下结算表

Billing
-------
User ID
Billing Year and Month
Billing Type
Square Feet
Charge per Square Foot
Total Charge
...    

主键是(用户ID,结算年和月降序,结算类型)。我假设每个帐单类型每月只收取一笔结算费用。

账单类型为1 =维护费,2 =水费,3 =施工费,4 =预留停车费。您可以从此表中的值生成帐单上的文本,因此无需将文本存储在数据库中。对于Billing Type 1,将填写Square Feet和Charge per Square Foot列,否则它们为空。

您仍然需要将付款与付款相匹配,但这应该足以让您开始走上正确的道路。

答案 3 :(得分:0)

结构有效。我会更改id命名。

在某些地方引用了account_id 但在帐户表中它是Id。

我会在帐户表中将其设为account_id。这样可以更轻松地找到可以为数据库用户加入的位置。你称之为的每个地方" Account_Id"应该是与生成它的单个主表相同的Account_Id。

相关问题