财务数据库设计

Nab*_*egh 3 database-design database-diagrams

我正在开发一个存储财务数据的应用程序,需要对将存储多个财务报表数据的表进行建模。我想出了以下两种设计,但我无法决定使用哪一种。感谢您的投入。

图一

图一

图二

图二

更新

基于以下丹尼尔回答的第三张图

图3

图3

Dan*_*her 5

IMO,资产负债表、损益表和现金流量表可以相同。这是我的看法:

-- Companies
CREATE TABLE company (
    [id]      int NOT NULL PRIMARY KEY,
    [name]    varchar(255) NOT NULL
);

-- "Balance sheet", "IFRS Income statement", etc
CREATE TABLE statement (
    [id]      int NOT NULL PRIMARY KEY,
    [name]    varchar(255) NOT NULL
);

--- "Tangible assets", "Outstanding stock", etc
CREATE TABLE statementRow (
    [id]      int NOT NULL PRIMARY KEY,
    statementId int NOT NULL,
    rowOrder  int NOT NULL,
    rowTitle  varchar(255) NOT NULL,
    rowDescription varchar(max) NULL,
    rowProperties varchar(max) NULL,
    FOREIGN KEY (statementId) REFERENCES statement ([id])
);

--- The facts
CREATE TABLE statementFact (
    companyId      int NOT NULL,
    statementRowId int NOT NULL,
    [date]         date NOT NULL,
    amount         numeric NULL,
    PRIMARY KEY ([date], statementRow),
    FOREIGN KEY (companyId) REFERENCES company ([id]),
    FOREIGN KEY (statementRowId) REFERENCES statementRow ([id])
);
Run Code Online (Sandbox Code Playgroud)

该模型的优点:

  • 您可以拥有不同类型的资产负债表、损益表等,以满足未来的报告需求
  • 该模型为每个语句定义了行的顺序(不要依赖标识列,因为以后将无法插入行)
  • 使用“日期”而不是“年”允许您每年多次发布报表,即每季度或每月,甚至是临时发布。
  • rowProperties 字段允许您添加信息,例如该行是否应为粗体、斜体或其他格式属性。
  • 或者,如果某些报告仅适用于某些公司,您可能希望将“companyId”从 statementFact 移至“statement”。