我了解如何设计一个在其表之间具有简单的一对多关系的数据库模式。我想知道将该集合中的一个特定关系指定为主要关系的约定或最佳实践是什么。例如,一个人有许多信用卡。我知道如何建模。我如何将其中一张卡指定为该人的主要卡?我提出的解决方案充其量似乎并不优雅。
我会尽量澄清我的实际情况。(不幸的是,实际的域只会混淆事物。)我有 2 个表,每个表都有很多列,比如说 Person 和 Task。我也有只有几个属性的项目。一个人有许多项目,但有一个主要项目。一个项目有许多任务,但有时有一个主要任务和备用任务,有时没有主要任务,而是一系列任务。没有不属于项目的任务,但并非严格禁止。
PERSON (PERSON_ID, NAME, ...)
TASK (TASK_ID, NAME, DESC, EST, ...)
PROJECT (NAME, DESC)
我似乎无法想出一种方法来同时对主要项目、主要任务和任务序列进行建模,而不会引入过于复杂或纯粹的邪恶。
这是迄今为止我想出的最好的:
PERSON (PERSON_ID, NAME, ...)
TASK (TASK_ID, NAME, DESC, EST, ...)
PROJECT (PROJECT_ID, PERSON_FK, TASK_FK, INDEX, NAME, DESC)
PERSON_PRIMARY_PROJECT (PERSON_FK, PROJECT_FK)
PROJECT_PRIMARY_TASK (PROJECT_FK, TASK_FK)
对于一个简单的概念来说,它似乎太多了。
这是我发现的一个问题,它处理非常相似的情况:Database Design: Circular dependency。
不幸的是,对于如何处理这种情况似乎没有达成共识,“正确”的答案是禁用数据库一致性检查机制。不酷。