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

How to configure periods dynamically according to the number of persons

我目前正在制作一个小型数据库以支付我的“小”费用 tracker/splitter。该应用程序所做的是提供 add/edit/remove Transactions(费用)的可能性。根据 Persons 的数量,当您添加新交易时,您必须指定付款人以及付款金额。然后,它将为交易中的每个人创建 Payments 行。

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

我的问题是我想在 Period(Id)SalaryConfiguration(IdGroup) 之间添加一个关系;它会指定在所述期间使用了哪个 SalaryConfiguration,但我不能,因为 IdGroup 不是主键。我有点卡在那里,因为我不知道一个时期如何根据人数和特定配置动态变化。我怎样才能同时 link 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)
);

您可以 link 将两个 table 与包含 SalaryConfigurations(Id)Periods(Id) 的另一个 table 一起使用。