oracle - 推荐的表设计 - APEX 21.1 / Oracle 19c
问题描述
我正在构建一个个人 Oracle APEX 应用程序来获得更多练习,以跟踪我们的“家庭贡献”(我们用于家务的名称)。使用下面的图表/电子表格,在数据库中设计这些数据点的最佳方法是什么?我对如何最好地处理CONTRIBUTORS
数据感到困惑。
家庭贡献可以分配给:
- 1 位家庭成员
- 2个家庭成员
- 所有家庭成员
- 有条件地基于贡献(有些仅适用于孩子,有些仅适用于父母)
家庭捐款每周轮换一次。每周都会为家庭成员分配一个数字(将数字递增 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
ASSIGNMENT
FAMILY_CONTRIBUTIONS.CONTRIBUTION_ID
FAMILY_MEMBERS.CONTRIBUTOR_ID
4
解决方案
从纯粹的数据库的角度来看,我建议您创建另一个包含贡献者的表。所以你的家庭贡献表有分配,然后新表有分配给贡献的成员。列方式:主 ID、贡献 ID 和贡献者 ID。当您选择贡献时,您从新表中选择分配给贡献的每个成员,并根据成员 ID 与成员表左连接。希望这是有道理的。
推荐阅读
- mysql - Spring Boot Security:编码密码看起来不像 BCrypt
- java - 对字符串中的字符求和并打印最大的字符串(java)
- javascript - Dynamodb 过滤器表达式不返回所有结果
- c# - 在报表查看器控件上动态加载本地报表 - Windows 窗体
- scala - 何时使用 countByValue 以及何时使用 map().reduceByKey()
- javascript - 使用 jQuery 切换元素宽度
- jquery - 从列表拖放到表 Jquery
- powershell - 如何使用 PowerShell 以管理员身份运行带有参数的程序
- swift - Firebase 短信密码重置
- node.js - Sequelize 列 Table.createdAt 不存在