AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 314741
Accepted
Stonecraft
Stonecraft
Asked: 2022-07-23 08:34:12 +0800 CST2022-07-23 08:34:12 +0800 CST 2022-07-23 08:34:12 +0800 CST

如何在填充子表之前自动在父表中创建条目?数据库术语中叫什么?

  • 772

我想要的是在子表中插入出版物的字符串名称以与出版物表中的出版物的 PK 相关联。例如,假设我有一个县表和一个国家内的州表。states 表将有一个国家列,在国家表中有一个外键。

期望的结果是我有一个“国家”表的“国家”表,其中:

  1. 可以在不首先明确添加其父国家/地区的情况下添加州。
  2. 为了便于使用,字符串名称在所有表中都可见
  3. 我不会为每个表中的每个条目存储字符串的实际副本。

因此,假设我想在一个没有条目的国家/地区添加一个州。我想拥有它,这样当我添加一个包含“Ruritania City”行的数据的对象时,“国家”的值为“Ruritania”,将发生以下情况:

  1. 检查“国家”表中的“Ruritania”条目。
  2. 如果“国家”的“国家名称”列中不存在“Ruritania”,则创建它。
  3. “国家”中新的鲁里塔尼亚条目的新 PK 放在“州”表中新的“鲁里塔尼亚城市”条目的外键列中。PK 用于将国家字符串名称列连接到“州”中具有 Ruritania FK 的所有行。

我确信所有这些都是非常标准的数据库内容,但我无法在文档中找到它。大多数数据库文档都是用数据库术语编写的,我很难知道何时找到了我正在寻找的术语。

我的问题是:

  1. 我所描述的是否可行且合理?
  2. 我将如何用数据库术语提出我的问题,以便我能找到答案?
  3. 如果您有有效实现此目标的具体想法,欢迎提出建议。我正在通过 SQLAlchemy 使用 Postgres,但是任何平台的答案都应该可以帮助我找到我正在寻找的东西。

编辑回应@mustaccio:

我认为不断被术语所抛弃。当我读到“回填”之类的选项时,我将其解释为父表将填充从子表链接的数据。我不希望它开箱即用地工作,但如果不是这样,回填意味着什么?

即使 DBMS 没有实现我描述为一个功能的所有功能,我预计这将是一种足够普遍的需求,以至于会有一种标准的方法来实现它,或者至少是该任务的名称。

关键是我不希望用户在为 Ruritania City 创建条目之前必须考虑是否存在 Ruritania 国家条目。如果用户说 Ruritania City 位于 Ruritania 的国家,则 Ruritania in countries 的条目将在“国家”中创建,如果它不存在。

我并不特别关心这个逻辑是在哪里实现的,只要最终结果是一个人类可以自己理解的表,即使数据库被导出到某个地方并与控制条目创建的逻辑分开。

database-design foreign-key
  • 1 1 个回答
  • 26 Views

1 个回答

  • Voted
  1. Best Answer
    mustaccio
    2022-07-23T11:48:06+08:002022-07-23T11:48:06+08:00

    您描述的称为“应用程序逻辑”;显然,我熟悉的所有 DBMS 都没有实现这种“开箱即用”。我说“显然”,因为许多应用程序不希望自动创建父记录,因为这只会导致数据库被垃圾填充,因此将其作为默认数据库行为是不可接受的。

    如果您的目标是将应用程序逻辑的实现卸载到数据库(有些人可能会反对这个想法,而其他人可能会接受),您可以通过在数据库中创建程序化对象(例如触发器和存储过程)来实现。在后一种情况下,您的应用程序不会直接将行插入到表中,而是调用数据库存储过程,由数据库存储过程来完成剩下的工作。

    • 1

相关问题

  • 过滤索引是否有助于改进基于输入时间的查询,还是应该避免这种情况?

  • MySQL VARCHAR 和 TEXT 数据类型有什么区别?

  • 存储计算值或根据要求重新计算它们更好吗?[复制]

  • 存储与计算聚合值

  • 在数据仓库中实现多对多关系有哪些方法?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve