gpt4 book ai didi

sql插入子表和父表

转载 作者:行者123 更新时间:2023-12-04 16:08:42 25 4
gpt4 key购买 nike

我有两个多对一关系的表。 (甲骨文)

**Table: PARENT**
Field: A (PK)
Field: B
Field: C1
Field: C2
Field: C3
Field: C4
Field: C5

**Table CHILD**
Field: A (PK) (FK to PARENT.A)
Field: D (PK)
Field: E

插入到子表和父表中的记录是同时插入的。

我想知道的是什么是最有效的方法来做到这一点。

当前,调用应用程序为整个插入步骤调用一个存储过程。存储过程当前具有以下特征:
Field: A
Field: B
Field: C (dilimited string)
Field: D (dilimited string)
Field: E (dilimited string)

该过程从输入循环遍历 C 并将每个值存储在一个数组中。然后使用该数组以及来自输入的 A 和 B 插入表 PARENT。

然后使用输入中的 A 并循环输入中的 D 和 E,并为分隔字符串中的每个项目插入表 CHILD。

每天最多可调用 300 万次。它需要尽可能高效。

进行多个 SP 调用而不是一个调用时会损失多少效率?

处理分隔字符串的所有循环似乎需要大量工作!

我在想调用应用程序可以为每个进入 CHILD 的条目进行单独的 SP 调用。但是,我如何确保以某种方式插入到 CHILD 中不会在插入到 PARENT 之前发生......这将是更多的存储过程调用。 (很多时候没有子记录插入,有的时候一般少于10条,但可能多达50条)

我也接受另一种方法来获取限制字符串 C 中的信息。

是否有比 while 循环更有效的方法来从分隔字符串中获取信息?

我没有写 SP 我被要求做一个小的修改,如果可能的话让它更有效。

有任何想法吗?

笔记:

我简化了表格,实际上有 10 个项目在 dilitied 字符串 C 中而不是 5 个,还有两个像 C 一样的 dilited 字符串被插入到表 PARENT 中。这些表格还有比显示的更多的字段

记录将在 30 天后删除。

最佳答案

这里有几件事......

首先,如果您通过一个分隔的字符串循环将相似的项目放在相似的列中,您可能需要重构您的表格以使其更加规范化。例如,如果 C是电话号码的分隔列表,列 C1 - C5phone1 - phone5 ,你应该有一个单独的 child phone table 。这取决于用例,但我认为这是一个潜在的 future 问题(即分隔符的知识)。
如果分隔字符串中包含不同的数据(电话号码、城市、姓名等) - 请为每个单独的数据元素设置单独的条目参数。这是一个更大的潜在问题(因为如果条目的顺序很重要,那么你就搞砸了,句号)。

你是对的,循环分隔的字符串是很多工作。不一定有更好的方法来做到这一点,除非您的 RDBMS 可能具有某种内置 split函数什么的(或者你可以调用一个外部函数)。如果可以,我宁愿避免它,并调用 child存储过程。它必须是每个 child ,但无论如何这实际上更好 - 不一定是性能明智的,但为了概念化它,以及 future 的维护。

如何预防 child在没有 parent 的情况下插入行?使用外键约束。如果违反了约束,那是调用者的错,而不是数据库的错。

好的,其中一些需要对 SP 进行一些重大更改,而另一些则需要对底层表结构进行更改(如果最初设置正确,应该对用户大部分透明)。但这就是我会尝试的......

哦,请告诉我这一切都在 promise 控制下运行......

关于sql插入子表和父表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7245684/

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