mysql - 多次引用一个外键

标签 mysql database database-design relational-database schema

在我的项目中,有收入也有支出。我有很多生意和 Assets 。每个企业和 Assets 都有收入和支出。除此之外,我还有一些一般收入,如工资、奖金等。所以最后我做了 6 个表,

1. business, 2. assets, 3. catagory, 4. income, 5. expense, 6. accounts

+----------+---------+    +--------+---------+  +----------+---------+ +----------+---------+ 
| Business | Name    |    | Assets | Name    |  | catagory | Name    | | account  | Name    |
+----------+---------+    +--------+---------+  +----------+---------+ +----------+---------+
| 1        |Business1|    | 1      | Land1   |  | 1        | profit  | | 1        | Bank1   |
| 2        |Business2|    | 2      | Land2   |  | 2        | salary  | | 2        | Bank2   |
| 3        |Business3|    | 3      | Land3   |  | 3        | Rent    | | 3        | Cash    |   
+----------+---------+    +--------+---------+  +----------+---------+ +----------+---------+

金融交易可能发生在企业、 Assets 或一般交易中,每个交易都有类别,或者可能将余额从一个账户转移到另一个账户。如下图

+--------+---------+---------+---------+---------+                             
| Income | From    | Catagory| Account | Amount  |             
+--------+---------+---------+---------+---------+                         
| 1      |Business1|Profit   |Bank1    |  1000   |                 
| 2      |Land1    |Rent     |Bank2    |  500    |                 
| 3      |General  |Salary   |Cash     |  700    |
| 4      |Transfer |Null     |Bank2    |  500    |
+--------+---------+---------+---------+---------+   

等等费用

+--------+---------+---------+---------+---------+                             
| Expense| From    | Catagory| Account | Amount  |             
+--------+---------+---------+---------+---------+                         
| 1      |Transfer | Null    | Bank1   |  500    |                 
| 2      |Land1    | Mainta..| Bank2   |  200    |                 
| 3      |General  | Food    | Cash    |  700    |
| 4      |Assets   | Invest  | Bank1   |  1000   |
+--------+---------+---------+---------+---------+   

这个设计有一些严重的问题,插入后我无法从收入或支出表中跟踪“来自”列。这个领域变得模棱两可。

我必须准备损益表、 Assets 负债表、账户摘要、业务和 Assets 明智报告,但我不知道如何处理这个数据库或如何修复这些表格。

请提供任何建议或想法来修复这些表结构以准备我的损益表和 Assets 负债表。

最佳答案

选项 1(简单方法):创建一个From字段以区分 Assets 和业务

Option 1

选项 2(正确方法):创建一个 From table 来区分 Assets 和业务

Option 2

选项 2 的最终查询:

SELECT 
    IncomeID,
    IF(
        (SELECT COUNT(assets.assetsID) FROM assets WHERE Income.FromId = assets.FromId) > 0,
        (SELECT assets.name FROM assets WHERE Income.FromId = assets.FromId),
        (SELECT Business.name FROM Business WHERE Income.FromId = Business.FromId),
        ) AS From,
    Catagory.name,
    Account.name,
    Income.amount
FROM 
    Income, Catagory, Account 
WHERE 
    Income.CatagoryId = Catagory.CatagoryId
AND 
    Account.AccountId = Account.AccountId
ORDER BY 
    IncomeID, Income.amount;

关于mysql - 多次引用一个外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49165296/

相关文章:

mysql - 如何使用 phpMyadmin 在 mysql 数据库中更改具有不同变量的字符串

entity-framework - 复合键字段的最佳顺序是什么?

mysql - 如何将 FactoryGirl 与 ActiveRecord 事务轨结合使用

MySQL - = ""和 != ""关于 null 的不同行为

database - Oracle 数据库更改的 Redis 监听器

sql - 这种形式的数据库叫什么?

android - 如何将数据提供给网站的移动应用程序

Mysql 1305 函数不存在 FROM_BASE64

MySQL - 查找围绕搜索关键字的单词

database - 哪种数据挖掘算法最好?