昨天我正在为住房社会设计计费结构我用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
如果帐户映射不存在,则表示它是社团帐户而非用户帐户。
参考: -
答案 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。