gpt4 book ai didi

database-design - 外键中的循环依赖项 : use it or avoid it?

转载 作者:行者123 更新时间:2023-12-04 06:57:00 26 4
gpt4 key购买 nike

我的应用程序将大量数据从数据库加载到复杂的数据结构中。内存中的数据结构类似于数据库的结构,这意味着如果数据库包含以下表:

  • 表A,键是A1
  • 表B,键是B1,其中一列是表A的[键]的外键
  • 表C,键是C1,其中一列是表B的[键]的外键

  • 然后我有 A、B 和 C 类,并且:
  • B (B::m_a) 的数据成员是指向 A
  • 的指针
  • C (C::m_b) 的数据成员是指向 B
  • 的指针

    这意味着如果我加载数据库,我必须以正确的顺序加载它。如果我首先加载 C,那么它会提示它无法设置值 C::m_b 因为它应该指向的实例没有加载。

    问题是当 A 中还有一列是其他表之一的外键时,假设是 C。

    我可以通过将所有外键加载为字符串来解决问题,然后在加载所有数据后执行查找,但由于有时我必须加载数百万条记录,因此我无法在这些上花费内存(尽管是临时的) ) 字符串。

    读过关于好的设计(例如“大规模 C++ 软件设计”一书)后,在我看来,循环引用根本不是一个好主意。
    例如。如果文件 X.H 包含 Y.H,但 Y.H 也包含 X.H,则您的设计可能很糟糕;如果类 X 依赖于类 Y,反之亦然,您可能有一个糟糕的设计,应该通过提取此依赖项并引入第三个类 Z 来解决,该类依赖于 X 和 Y(X 和 Y 不再相互依赖) .

    将此设计规则扩展到数据库设计是否是个好主意?换句话说:防止外键中的循环引用。

    最佳答案

    只有在创建层次结构(例如组织树)时才需要循环引用。

    Table Employees
    EmployeeID <----------|
    SupervisorEmployeeID ---|

    关于database-design - 外键中的循环依赖项 : use it or avoid it?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3891535/

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