我正在设计一个应用程序(带有 sqlite的Python),它可以处理一些贡献者随时间跨多个群体移动的情况。
我的设计目前看起来像(PK 为粗体,FK 为斜体,如果 FK 是 PK 的一部分则为斜体):
- 组(ID,名称)
- 贡献者(ID,姓名,名字)
- 动作(动作ID,名称)
- 贡献者动作(贡献者ID,动作ID,日期)
- 会员资格(群组 ID、贡献者 ID、开始日期、结束日期)
我的目标是保留会员资格的历史记录,以便在特定贡献时检索贡献者的正确会员组。
这样做涉及在主键(会员表)中使用日期列。但是,EndDate
这可能是NULL
针对贡献者的当前会员资格,而且我读到这可能不是一个好的(甚至是允许的)做法。
我是否遗漏了某些内容以至少获得 3NF 设计?
这里不存在正常化问题。
有时人们会使用任意大的日期而不是 NULL,但这会带来自身的问题。