带外键的数据库:描述前向与后向关系的好方法?
Databases with Foreign Keys: Good way to picture forward vs. backward relationship?
在任何关系数据库系统中,我们可以同时拥有父模型和子模型(存储父模型的外键)。
虽然我在实践中使用这些很好,但这些通常被描述为 "forward relationship" 或 "reversing/backref/related_name/going backward" 的方式本身对我来说总是倒退!
例如,许多资料和文章将从子节点到父节点描述为 "forward foreign key." 但是当我描绘一棵树时,我从顶部的父节点开始,然后向下遍历它as "forward," 这与其他地方描述从父级到子级作为反向或反向关系的方式相反。
有没有人解释这个术语可以帮助我记住这个?或者你想象它的方式?我搜索了这个主题,但没有发现任何人讨论 conventions/terminology(只是如何使用它进行编码)。
在关系模型中 relation(ship)s/associations 由表表示。 FK(外键)约束不是关系,尽管它们被错误地称为关系。它们是约束,无需声明、已知或存在即可查询。 FK 约束声明值在别处出现一次。或者等价地,values/entities一起参与某种关系一次。 "Parent" vs "child" 适用于任何树形结构或其他层次结构的关系 & "forward" vs "backward" 是适用于任何定向二元关系的任何方向的通用术语——包括表 "has a FK that references" 或 "appears once at" 上的元关系。 (但这实际上并不是调用 FKs "relationships" 的产生方式。)
只有通用约定...包括 "trees"...有趣的是,外面的树从根部向上生长,而不是向下生长。计算机科学树的下降只是另一种惯例……对于西方人来说,从上到下写作,朝着有更多空间的地方写作。尽管某些约定可能有特殊原因,但不必担心它们是否有意义或是否达成一致。
我们说 FK 引用 PK,因此在英语中从左到右阅读我们可以称之为 "forward"。 FK 可以按关系形成循环,但 SQL DBMS 倾向于将声明限制在树中,因为它们用级联功能使它们超载并且不会费心去允许 dag 或循环。所以在 SQL 中,父项被引用,子项被引用。但是 SQL FK 不是关系 FK 的类似物;它们类似于我们所谓的关系外国超级密钥。所以 "FK" 超载了。
没有理由期望一致性。法式吐司不是吐司。关系不是关系。
不要使用这些通用术语。 相反,清楚地确定您正在谈论的关系(船)s/associations,命名 and/or 订购他们参数,并正确使用正确的技术术语,例如 "referencing" & "referenced"。需要我说你必须 记住技术术语的定义 吗?或者对于通用术语,与此一致,定义您将在每个特定上下文中对通用术语使用的特定含义。 (但你只是自找误会。)
在任何关系数据库系统中,我们可以同时拥有父模型和子模型(存储父模型的外键)。
虽然我在实践中使用这些很好,但这些通常被描述为 "forward relationship" 或 "reversing/backref/related_name/going backward" 的方式本身对我来说总是倒退!
例如,许多资料和文章将从子节点到父节点描述为 "forward foreign key." 但是当我描绘一棵树时,我从顶部的父节点开始,然后向下遍历它as "forward," 这与其他地方描述从父级到子级作为反向或反向关系的方式相反。
有没有人解释这个术语可以帮助我记住这个?或者你想象它的方式?我搜索了这个主题,但没有发现任何人讨论 conventions/terminology(只是如何使用它进行编码)。
在关系模型中 relation(ship)s/associations 由表表示。 FK(外键)约束不是关系,尽管它们被错误地称为关系。它们是约束,无需声明、已知或存在即可查询。 FK 约束声明值在别处出现一次。或者等价地,values/entities一起参与某种关系一次。 "Parent" vs "child" 适用于任何树形结构或其他层次结构的关系 & "forward" vs "backward" 是适用于任何定向二元关系的任何方向的通用术语——包括表 "has a FK that references" 或 "appears once at" 上的元关系。 (但这实际上并不是调用 FKs "relationships" 的产生方式。)
只有通用约定...包括 "trees"...有趣的是,外面的树从根部向上生长,而不是向下生长。计算机科学树的下降只是另一种惯例……对于西方人来说,从上到下写作,朝着有更多空间的地方写作。尽管某些约定可能有特殊原因,但不必担心它们是否有意义或是否达成一致。
我们说 FK 引用 PK,因此在英语中从左到右阅读我们可以称之为 "forward"。 FK 可以按关系形成循环,但 SQL DBMS 倾向于将声明限制在树中,因为它们用级联功能使它们超载并且不会费心去允许 dag 或循环。所以在 SQL 中,父项被引用,子项被引用。但是 SQL FK 不是关系 FK 的类似物;它们类似于我们所谓的关系外国超级密钥。所以 "FK" 超载了。
没有理由期望一致性。法式吐司不是吐司。关系不是关系。
不要使用这些通用术语。 相反,清楚地确定您正在谈论的关系(船)s/associations,命名 and/or 订购他们参数,并正确使用正确的技术术语,例如 "referencing" & "referenced"。需要我说你必须 记住技术术语的定义 吗?或者对于通用术语,与此一致,定义您将在每个特定上下文中对通用术语使用的特定含义。 (但你只是自找误会。)