推荐 Table 设计 - APEX 21.1 / Oracle 19c
Recommended Table Design - APEX 21.1 / Oracle 19c
我正在构建一个个人 Oracle APEX 应用程序以获得更多练习来跟踪我们的 'Family Contributions'(我们用来做家务的名字)。使用以下chart / spreadsheet,在数据库中设计这些数据点的最佳方法是什么?我对如何最好地处理 CONTRIBUTORS
数据感到困惑。
家庭贡献可以分配给:
- 1 位家庭成员
- 2位家庭成员
- 所有家庭成员
- 有条件地基于贡献(有些只适合孩子,有些只适合 parents)
家庭捐款每周轮换一次。每周都会为一位家庭成员分配一个数字(数字递增 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
、2
、3
的情况,方法是使用 child ASSIGNMENT
table 使用行 [=18] =] 和 FAMILY_MEMBERS.CONTRIBUTOR_ID
,但即使这样也不确定如何最好地处理案例 4
。
从纯数据库的角度来看,我建议您创建另一个包含贡献者的 table。所以你的家庭贡献 table 有分配,然后新的 table 有分配给贡献的成员。列方式:主要 ID、贡献 ID 和贡献者 ID。当您 select 贡献时,您 select 每个成员分配给新 table 的贡献,并根据成员 ID 离开加入成员 table。希望它有意义。
我正在构建一个个人 Oracle APEX 应用程序以获得更多练习来跟踪我们的 'Family Contributions'(我们用来做家务的名字)。使用以下chart / spreadsheet,在数据库中设计这些数据点的最佳方法是什么?我对如何最好地处理 CONTRIBUTORS
数据感到困惑。
家庭贡献可以分配给:
- 1 位家庭成员
- 2位家庭成员
- 所有家庭成员
- 有条件地基于贡献(有些只适合孩子,有些只适合 parents)
家庭捐款每周轮换一次。每周都会为一位家庭成员分配一个数字(数字递增 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
、2
、3
的情况,方法是使用 child ASSIGNMENT
table 使用行 [=18] =] 和 FAMILY_MEMBERS.CONTRIBUTOR_ID
,但即使这样也不确定如何最好地处理案例 4
。
从纯数据库的角度来看,我建议您创建另一个包含贡献者的 table。所以你的家庭贡献 table 有分配,然后新的 table 有分配给贡献的成员。列方式:主要 ID、贡献 ID 和贡献者 ID。当您 select 贡献时,您 select 每个成员分配给新 table 的贡献,并根据成员 ID 离开加入成员 table。希望它有意义。