房协管理系统数据库结构

问题描述 投票:0回答:4

我正在为住房协会设计计费结构。

需要做哪些改变?

我在哪里发布社会余额(借方、贷方),例如费用建筑保险和收入,例如广告板囤积?

如何处理余额审计跟踪(将其放在交易ID为FK的单独表的交易表中)?

所有表默认都有创建和修改时间、创建者和IP地址。

billingstatement

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

accounts

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  | 

transaction

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=用户付费,2=社会收入,3=社会支出

map_account_user

map_id | account_id | user_id
 1     |  2         | 1001

如果帐户映射不存在,则它是社会帐户而不是用户帐户。

账单银行设计

银行项目样本

mysql sql database database-design
4个回答
1
投票

我对于将聚合与实体存储在一起犹豫不决。除非总数非常难以计算,否则您应该始终通过检查细节来解释这些。


0
投票

我假设您正在设计一个关系数据库。 在关系数据库中,您可以对数据进行“标准化”。 我在遵循您的数据库设计时遇到困难,因为您有太多称为 id 的不同字段。 每个 id 字段应该有一个唯一的名称,这样人们就可以知道不同的 id 字段代表什么。

让我们从事务表开始。 通常表名是单数。 我将表名和列名大写。 您不必遵守该约定。

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

交易ID是一个自增整数。  它也是事务表的主(集群)键。  交易类型为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 每月的历史余额。  这允许审计员通过对交易表运行查询来验证余额。

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

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

此表与 UserAccountBalance 表类似,但适用于协会帐户。

接下来我们看一下账单表

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

主键是(用户 ID、计费年份和月份降序、计费类型)。  我假设您每月每种计费类型仅收取一笔计费费用。  

计费类型为1=维护费、2=水费、3=施工费、4=预留停车费。 您可以根据此表中的值生成帐单上的文本,因此无需将文本存储在数据库中。 对于计费类型 1,请填写“平方英尺”和“每平方英尺费用”列,否则为空。

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


0
投票

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

我会将其设为帐户表中的 account_id。 这使得您可以更轻松地找到数据库用户可以加入的位置。 您称之为“Account_Id”的每个地方都应该与生成它的单个主表具有相同的 Account_Id。


0
投票
非常感谢您的努力。你参考银行系统确实是最好的方法。我想为您提供一些想法,如果您觉得这对您更好的话,这些想法可能会对您有所帮助。

我们开始吧。如果您使用描述列的数据:

{水费

施工费

预留停车位变更}


作为新列,您的行数将会减少,并且您可以进行高效的数据维护。对于每个 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

对于您对借记卡和贷记卡的使用有疑问:

借记为费用Bldginsurance

信用为Adv板囤积


您还可以添加其他栏目,如用户名、人数、电费等

© www.soinside.com 2019 - 2024. All rights reserved.