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

fhg3lkii  于 2022-11-15  发布在  SQLite
关注(0)|答案(1)|浏览(133)

我正在为我的费用跟踪器/拆分器创建一个数据库(提供添加/编辑/删除Transactions的可能性)。根据Persons的数量,当您添加新交易时,您必须指定谁支付以及支付的金额。然后,它为Transactions内的每个人创建Payments行。
您必须配置每个人的工资,然后它将计算每个人未支付费用的比例(IsPayed标志)。一旦每个人都准备好结算,他们必须创建一个期间(开始和结束日期)。这些日期之间的所有交易将被标记为已支付(IsPayed = true),应用程序将假定它们已及时结算和冻结。将有一个介于TransactionPeriod之间的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)
);

8qgya5xd

8qgya5xd1#

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

相关问题