首页 > 解决方案 > 推荐的表设计 - APEX 21.1 / Oracle 19c

问题描述

我正在构建一个个人 Oracle APEX 应用程序来获得更多练习,以跟踪我们的“家庭贡献”(我们用于家务的名称)。使用下面的图表/电子表格,在数据库中设计这些数据点的最佳方法是什么?我对如何最好地处理CONTRIBUTORS数据感到困惑。

家庭贡献可以分配给:

  1. 1 位家庭成员
  2. 2个家庭成员
  3. 所有家庭成员
  4. 有条件地基于贡献(有些仅适用于孩子,有些仅适用于父母)

家庭捐款每周轮换一次。每周都会为家庭成员分配一个数字(将数字递增 1 和 4 变为 1),并映射到图表中的贡献 ID。我的第一次破解(暂时忽略该CONTRIBUTOR列:

FAMILY_CONTRIBUTIONS
---------------------------------------------
CONTRIBUTION_ID     NUMBER          PK
PERIODICITY         VARCHAR2(50)    NOT NULL
CONTRIBUTOR_ID      NUMBER          NOT NULL  -- ???
CONTRIBUTION_DESC   VARCHAR2(1000)  NOT NULL
MON                 CHAR(1)         NOT NULL
TUE                 CHAR(1)         NOT NULL
THU                 CHAR(1)         NOT NULL
FRI                 CHAR(1)         NOT NULL
SAT                 CHAR(1)         NOT NULL
SUN                 CHAR(1)         NOT NULL
CREATED_BY          VARCHAR2(50)    NOT NULL
DOR                 DATE            NOT NULL
UPDATED_BY          VARCHAR2(50)    NOT NULL
DLU DATE            NOT NULL

FAMILY_MEMBERS
---------------------------------------------
FAMILY_MEMBER_ID    NUMBER          PK
MEMBER_NAME         VARCHAR2(50)    NOT NULL
CONTRIBUTOR_ID      NUMBER          NOT NULL
FAMILY_ROLE         VARCHAR2(50)    NOT NULL
CREATED_BY          VARCHAR2(50)    NOT NULL
DOR                 DATE            NOT NULL
UPDATED_BY          VARCHAR2(50)    NOT NULL
DLU                 DATE            NOT NULL

我可以通过使用和的行使用子表来处理案例1,但即使这样也不确定如何最好地处理案例。23ASSIGNMENTFAMILY_CONTRIBUTIONS.CONTRIBUTION_IDFAMILY_MEMBERS.CONTRIBUTOR_ID4

标签: oracleoracle-apex

解决方案


从纯粹的数据库的角度来看,我建议您创建另一个包含贡献者的表。所以你的家庭贡献表有分配,然后新表有分配给贡献的成员。列方式:主 ID、贡献 ID 和贡献者 ID。当您选择贡献时,您从新表中选择分配给贡献的每个成员,并根据成员 ID 与成员表左连接。希望这是有道理的。


推荐阅读