首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite数据库,其中两个表相互引用

SQLite数据库,其中两个表相互引用
EN

Stack Overflow用户
提问于 2017-04-11 03:25:39
回答 1查看 43关注 0票数 0

我想要一个包含两个表的数据库,如下所示:

代码语言:javascript
复制
Parent
-------
Pk
UgliestChildPk
StrongestChildPk


Child
------
Pk
ParentPk

我正在使用SQLite,尽管这可能与它没有太多关系。在我的模型中,父母总是至少有一个孩子,在这种情况下,最丑陋和最强大的将是父母的独生子。我需要能够检索父代的所有子代(通过Child.ParentPk外键)。我还需要能够高效地检索父母最丑陋和最强壮的孩子。我需要能够添加和删除孩子,以及改变哪些是最丑陋和最强大的。

我猜它抛出了一个标志,即父表和子表都引用了对方。有没有更好的方法来完成这类关系?

我可以将IsUgliest和IsStrongest列添加到子表中,但我希望有效地确保每个父表都有且只有一个最丑陋和最强的子级(尽管它们可能是相同的)。我也不希望为了快速检索它们而必须向IsUgliest和IsStrongest列添加索引。我所描述的模式可以防止这种情况,因为Pk列无论如何都是隐式索引的。

有没有更好的方法?有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2017-04-11 03:43:38

我更喜欢下面的选项2,因为它是最容易维护和设计逻辑的。

选项1

实现这一点的一种方法是在创建表时指定[strongest] not null unique。然后你将决定如何列出最强的,例如1是最强的。

虽然这将允许您执行所要求的操作,但您需要一些逻辑来重新排列表中的值,以便可以添加或删除其他子项。这将允许您根据您在丑陋/强度分数上设置的升序/降序轻松地重新分配最丑陋的孩子

选项2

第二种方法是仍然使用IsStrongest和IsUgliest列,但将它们的类型设置为Boolean,然后执行检查,以确保在尝试添加新的最丑陋或最强的子级时,只有一个person设置为true

选项3使用您提供的表结构来快速跟踪父表中最强大和最丑陋的子级。你可能需要另一种方法来跟踪孩子的力量和美丽,这样你就可以很容易地确定谁是父母最丑/最强的孩子

此外,如果您可能有多个父级,则应使用如下所示的链接表

代码语言:javascript
复制
Parent_Child
------------
PCPK
Parent_FK
Child_FK
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43331444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档