【问题标题】:Is this a good way to represent a one to many relationship for one table?这是表示一个表的一对多关系的好方法吗?
【发布时间】:2019-10-21 00:44:45
【问题描述】:

我目前正在从事一个项目,我必须在其中存储类似于家谱概念的数据。为了更具体地描述它,我有一个名为concepts 的表,其中每个概念可以有许多作为孩子的概念,但每个孩子只能有一个父母,我认为这是一对多的关系。我尝试使用的方法是创建另一个名为conceptsTree 的表,它将存储概念表的ID。这是我实现的方法的样子:

class Concepts(db.Model):
    __tablename__='concepts'
    concept_id = db.Column(db.Integer, primary_key=True)
    concept_name = db.Column(db.String(30), unique=True, index=True)
    concept_description = db.Column(db.String(300), index=True)

class ConceptsTree(db.Model):
    __tablename__='conceptsTree'
    concept_parent_id = db.Column(db.Integer)
    concept_child_id = db.Column(db.Integer)

我想知道的是,这种方法对于表示一对多关系是否正确/有效。对于实现,我使用 python、Flask 和 SQL。不确定这个问题是否与我发现的这个问题相似:One to many relationship on the same table

【问题讨论】:

    标签: sql relationship one-to-many


    【解决方案1】:

    您可以通过简单地在概念表中包含父 ID 列来完成关系。主要问题归结为您如何访问数据以及它需要多高的效率。如果您总是从孩子到父母,那应该是相当有效的,但是如果您需要为给定的父母获取所有孩子,那么如果您的表非常大,则可能会很慢。您还可以在父 ID 列上创建索引并将概念 ID 包含在索引中,以便可以从索引中快速检索它,而无需维护单独的表。

    【讨论】:

    • 我不确定如何访问数据,但由于这种方法似乎有效,而且我相信表不会很大,这将是一个好方法。如果有任何问题,我可以根据您在概念表中添加另一个属性来存储父 ID 的建议轻松更改模型。现在更清楚了。谢谢!
    猜你喜欢
    • 2022-12-12
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 2019-11-07
    • 2015-07-15
    • 1970-01-01
    相关资源
    最近更新 更多