如何根据人数动态配置时段

Posted

技术标签:

【中文标题】如何根据人数动态配置时段【英文标题】:How to configure periods dynamically according to the number of persons 【发布时间】:2021-12-21 11:06:28 【问题描述】:

我目前正在制作一个小型数据库,以配合我的“小型”费用跟踪器/分配器。该应用程序所做的是提供添加/编辑/删除Transactions(费用)的可能性。根据Persons 的数量,当您添加新交易时,您必须指定付款人以及付款金额。然后,它将为事务中的每个人创建Payments 行。

您必须配置每个人的薪水,然后,它将按比例计算每个人必须支付的所有未付工资(IsPayed 标志,也许应该命名为IsReimboursed)。然后,一旦每个人都准备好安顿下来,他们必须创建一个时期并指定开始和结束日期。然后,这些日期之间的所有交易都将被标记为已付款 (IsPayed = true),应用程序将假定它们已按时结算和冻结。 Transaction 和 Period 之间会有一个 FK,用于指定从哪个时期开始支付交易。

我的问题是我想在Period(Id)SalaryConfiguration(IdGroup) 之间添加一个关系;它会指定在所述期间使用哪个SalaryConfiguration,但我不能,因为 IdGroup 不是主键。我有点卡在那里,因为我不知道一个时期如何在人数和特定配置上动态变化。我怎样才能设法将SalaryConfigurationPeriods 链接在一起?

这里是数据库 DDL:

CREATE TABLE "Transactions" (
    "Id"    INTEGER NOT NULL UNIQUE,
    "FkIdCategories"    INTEGER NOT NULL,
    "Date"  TEXT NOT NULL,
    "Name"  TEXT NOT NULL,
    "Description"   TEXT,
    "Cost"  INTEGER NOT NULL,
    "IsPayed"   INTEGER NOT NULL DEFAULT 0,
    PRIMARY KEY("Id" AUTOINCREMENT),
    CONSTRAINT "Fk_Categories_Transactions" FOREIGN KEY("FkIdCategories") REFERENCES "Categories"("Id")
);

CREATE TABLE "Categories" (
    "Id"    INTEGER NOT NULL UNIQUE,
    "Name"  TEXT NOT NULL UNIQUE,
    PRIMARY KEY("Id" AUTOINCREMENT)
);

CREATE TABLE "Payments" (
    "Id"    INTEGER NOT NULL UNIQUE,
    "FkIdPerson"    INTEGER NOT NULL,
    "FkIdTransaction"   INTEGER NOT NULL,
    "Amount"    INTEGER NOT NULL,
    CONSTRAINT "Fk_Persons_Payments" FOREIGN KEY("FkIdPerson") REFERENCES "Persons"("Id"),
    CONSTRAINT "Fk_Transactions_Payments" FOREIGN KEY("FkIdTransaction") REFERENCES "Transactions"("Id"),
    PRIMARY KEY("Id" AUTOINCREMENT)
);

CREATE TABLE "Persons" (
    "Id"    INTEGER NOT NULL UNIQUE,
    "Name"  TEXT NOT NULL,
    PRIMARY KEY("Id" AUTOINCREMENT)
);

CREATE TABLE "SalaryConfigurations" (
    "Id"    INTEGER NOT NULL UNIQUE,
    "IdGroup"   INTEGER NOT NULL,
    "FkIdPerson"    INTEGER NOT NULL,
    "Salary"    INTEGER NOT NULL,
    "SaveDate"  TEXT NOT NULL,
    CONSTRAINT "Fk_Persons_SalaryConfiguration" FOREIGN KEY("FkIdPerson") REFERENCES "Persons"("Id"),
    PRIMARY KEY("Id" AUTOINCREMENT)
);

CREATE TABLE "Periods" (
    "Id"    INTEGER NOT NULL UNIQUE,
    "StartDate" TEXT NOT NULL,
    "EndDate"   TEXT NOT NULL,
    "FkIDSalaryConfigurationGroup"  INTEGER NOT NULL,
    PRIMARY KEY("Id" AUTOINCREMENT)
);

【问题讨论】:

约束(包括 PK 和 FK)不需要保持、知道或声明以记录或查询。在关系(& ER)模型中,表代表关系/关系/关联,这就是我们记录和查询的方式。 “关系”和“关系”意味着 FK 是在误解关系模型的方法和演示中普遍滥用术语。约束声明是为了完整性——它们允许 DBMS 拒绝对已知无效状态的尝试更新。是时候关注已出版的学术信息建模和数据库设计教科书了。 【参考方案1】:

您可以将这两个表与另一个包含SalaryConfigurations(Id)Periods(Id) 的表链接在一起。

【讨论】:

以上是关于如何根据人数动态配置时段的主要内容,如果未能解决你的问题,请参考以下文章

P06: 如何根据后台接口动态获取路由并进行配置

如何在Azure上动态配置IP地址

MyBatis 如何配置动态的 sql 语句

GKE 集群的维护时段

根据配置条目在 React 中动态导入组件

通过配置属性动态连接 OSGi 服务