gpt4 book ai didi

database - 在表之间的一对多关系中指定主要关系的约定是什么?

转载 作者:搜寻专家 更新时间:2023-10-30 21:54:38 24 4
gpt4 key购买 nike

我了解如何设计在表之间具有简单一对多关系的数据库模式。我想知道将该组中的一个特定关系指定为主要关系的惯例或最佳做法是什么。例如,一个人有很多信用卡。我知道如何建模。我如何将其中一张卡片指定为该人的主要卡片?我想出的解决方案充其量似乎不够优雅。


我会尽量澄清我的实际情况。 (不幸的是,实际的域只会混淆事情。)我有 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 .

不幸的是,对于如何处理这种情况似乎没有达成共识,“正确”的答案是禁用数据库一致性检查机制。不酷。

最佳答案

嗯,在我看来,Person 与 CreditCard 有两种关系。一个是这个人拥有它,另一个是他们认为它是他们的主要信用卡。这告诉我你有一对一和一对多的关系。一对一的返回关系已经在 CreditCard 中,因为它包含一对多关系。

这意味着我会将 primary_cc_id 添加为 Person 中的一个字段,而单独保留 CreditCard。

关于database - 在表之间的一对多关系中指定主要关系的约定是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2216675/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com