首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >删除每一行并在保存到数据库时重新添加。

删除每一行并在保存到数据库时重新添加。
EN

Software Engineering用户
提问于 2019-04-29 03:58:46
回答 4查看 337关注 0票数 7

我有一个结构看起来像

人物

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ID        int
Name      nvarchar

电话

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ID        int
PersonId  int
Number    nvarchar
Make      nvarchar
Model     nvarchar
MultiSim  bit

一个人可以有很多电话

目前,我的逻辑是当用户单击“保存”按钮时,应用程序接收Person对象的一个副本(其中包括一个数组电话)。

如前所述,这种关系是一对多的。因此,在保存时,只有一个人,所以很容易更新这个人(不需要删除和重新添加)。

目前,我删除了所有的手机相关的人,并重新添加他们。

我所看到的负面情况是:

  1. 额外的时间被占用,因为它必须删除,然后重新添加每一个电话,无论是否有修正案。
  2. 每当这个进程发生时,自动递增的电话ID就会越来越大。

我找不到任何东西来解释我目前的做法是否错误。我应该关心身份证越来越大了吗?我是否应该用我想要保存的对象来检查当前的手机对象呢?

EN

回答 4

Software Engineering用户

发布于 2019-04-29 05:01:01

我总是使用删除所有和重新添加的方法。

  1. 通常,只删除和重新添加比应用更新所需的逻辑更快。这可能需要选择、在运行检查时锁定等等。
  2. 我对所有内容都使用GUID,从而避免在插入问题上更改您的id。尽管必须指出,如果您有现有的id,则只需更改insert即可重用现有的id。
  3. 很简单。当你遇到瓶颈时,找出一种优化的方法。
  4. 当您执行大容量插入时,它会慢一些,因为它会强制循环。但是,通过使用一条语句删除所有子对象(其中personid在.中),很容易避免这种情况。然后阅读所有的东西
票数 6
EN

Software Engineering用户

发布于 2019-04-29 04:23:58

如果我对这种方法有问题的话,它将不是电话id的计数器,而是需要额外时间的事实。虽然有几个电话号码可能没什么大不了的(我无法想象在任何实际情况下有超过10个的人),但请记住,如果您必须保存所有的Person实例,那么现在它不再是一个循环而是一个嵌套的循环。

如果您决定要在与Person的一对多关系中删除和重新创建订单,那么在保存上将再次完成更多的工作。它的可伸缩性不是很强,因此您可能会有一天,您的客户端有10秒或更长的等待时间,否则就会直接保存到数据库中。

你问为什么这不应该是一个正确的方法,但我向你逆转了这个问题。为什么您不简单地跟踪哪些电话号码已经添加或删除,并相应更新?是否有特别的理由这样做,或根本的原因保持代码更简单?由于从长远来看,这最终可能是一个问题,我鼓励你考虑在必要时简单地添加和删除。

票数 2
EN

Software Engineering用户

发布于 2023-03-21 06:52:07

额外的时间被占用,因为它必须删除,然后重新添加每一个电话,无论是否有修正案。

在只需要一个更改的地方进行大量更改是效率低下且速度慢的。

在不需要任何东西的情况下做大量的改变是愚蠢的(对不起)。

数据库必须记录您所做的每一个更改,如果您要删除所有内容并将其全部重新添加,它基本上是做了两次这样的操作,没有任何理由,如果没有任何实际更改。与仅仅读取数据库相比,在数据库中编写任何东西都非常非常慢(更新总是涉及磁盘活动)。

此外,如果您的数据库正在进行任何类型的“数据审核”(其中的更改自动转移到“历史”表中),那么这种方法将生成大量的“箔条”,任何试图调查实际问题的人都必须“费力地”通过。(去过那里,做了那件事;而不是“有趣”)。

理想情况下,您不应该更改任何记录的主键(ID)。

在创建记录时应该分配它,并且应该保持不变,直到记录最终被销毁。想象一下,如果你的银行“重新编号”每个人的支票帐户,而其他人关闭他们的混乱!

如果有任何其他表引用您的人物_电话表,并且您正在正确地使用外键,那么您就根本无法删除它们!

正确执行此工作;更新用户更改的任何行,插入它们添加的任何行,并删除它们删除的任何行。

当此过程发生时,自动递增的电话ID会越来越大.我应该关心身份证越来越大了吗?

可能不会。

这取决于它有多大。一个int列的值将高达20亿(2^31-1)。如果你超过这一点,事情就会变得有点“混乱”。

在这种情况下,您可能还好,但是如果要将相同的逻辑应用到其他地方,这可能是一个完全不同的故事。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/391117

复制
相关文章
入门 | jquery特效:上升、下降、删除、添加一行
此代码实现方法简洁,而且不会丢失(用JavaScript添加一行人工填入的Input值)input值。仅依赖JQuery,不依赖其它扩展。
疯狂的技术宅
2019/03/28
2.5K0
入门 | jquery特效:上升、下降、删除、添加一行
jquery 动态添加一行数据,支持动态删除
<tr id="templateTr" style="display: none;"> <td>联系人</td> <td><input type="text" name="conName" disabled="disabled" style="border: 0; background: #fff;box-shadow: none;cursor:text;" class="form-control" ></td> <td>部门</td> <td><input type="text" name="conDepart" disabled="disabled" style="border: 0; background: #fff;box-shadow: none;cursor:text;" class="form-control" ></td> <td>联系电话</td> <td><input type="text" name="conTel" disabled="disabled" style="border: 0; background: #fff;box-shadow: none;cursor:text;" class="form-control" ></td> <td>邮箱</td> <td><input type="text" name="conEmail" disabled="disabled" style="border: 0; background: #fff;box-shadow: none;cursor:text;" class="form-control" ></td> <td><button type="button" class="button2 delrow">删除</button></td> </tr>
用户5640963
2019/07/25
2.7K0
Excel 每 N 行拼成一行
~(1)表示取当前成员的第 1 个子成员,group 用于分组,(#-1)\4 相等的成员将分到同一组,其中 #是成员序号,符号 \ 表示除法取整。
朱迪
2024/06/05
980
Git的使用(一):创建本地仓库并在其中添加、修改、删除文件
版本库又名仓库,英文名repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。由于git是分布式版本管理工具,所以git在不需要联网的情况下也具有完整的版本管理能力。下面说一下如何创建本地版本库:
code随笔
2020/04/14
2.3K0
Git的使用(一):创建本地仓库并在其中添加、修改、删除文件
Java 数据库添加,修改和删除
都是用executeUpdate方法 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import com.mysql.jdbc.Statement; public class JDbc { public static void main(String[] args) { Connection connection
用户2965768
2019/03/11
1.8K0
Java 数据库添加,修改和删除
Git : 每一行命令都算数
为了说明我们日常开发中执行的一系列Git命令的作用是什么,我们需要了解Git的工作区域的概念,几乎每一个常见的Git命令操作都可以通过工作区域来解释。
sowhat1412
2022/09/20
2860
Git : 每一行命令都算数
如何批量对每一行或者每一列进行排序?
先上效果图。 (一) 批量针对每一行排序 1. 把每一行转换成列表 函数:Table.ToRows 2. 针对每一个行生成的列表进行排序 函数:List.Transform,List.Sort 3.
逍遥之
2020/03/23
3K0
用python记录运行pid,并在需要时
  我在跑爬虫程序的时候,由于爬虫程序的等待目标服务器返回数据的时间很长,而cpu占用很低,所以经常挂着代理一跑就跑好几百个。但是爬虫程序通常是写了死循环,或直到分配给该进程的任务都跑完才退出的。如果我们想中途结束掉这些任务,是没办法手工一个一个kill掉的。那么该如何结束这些进程呢?
py3study
2020/01/08
9420
Excel 每 N 列内容填成一行
现在要进列转行:每行的每 2 列内容填成一行,即扩展成 3 行;第 1 列 ID 保留;新增第 2 列 No 是扩展出来的行号:
朱迪
2024/05/16
930
每敲一行代码,需要测试1000次!!!
此前Oracle 惨遭亚马逊、Salesforce 弃用,究其根本原因,不是因为亚马逊等企业为了省钱,而是因为 Oracle 数据库逐渐满足不了他们业务的发展需求。
用户5224393
2019/09/17
6270
每敲一行代码,需要测试1000次!!!
apktool重新打包添加签名
一.生成apk apktool b 反编译后项目目录 -o 新apk名称.apk 二.生成签名 keytool -genkeypair -alias 新apk名称.apk -keyalg RSA -validity 100 -keystore app.keystore #拓展 -genkey 生成秘钥 -alias 别名 -keyalg 秘钥算法 -keysize 秘钥长度 -validity 有效期 -keystore 生成秘钥库的存储路径和名称 -keypass 秘钥口令 -storep
小小咸鱼YwY
2020/07/01
7430
QListWidget添加删除
qt和vc一样自由线程模式,线程间可以访问ui,但线程间访问qt内部封装问题,导致很多一样,可以使用信号和槽线程间传递数据,避免异常
sofu456
2020/08/11
1K0
C#结合JS实现HtmlTable动态添加行并保存到数据库
在 Web 应用项目中,实现一对多录入的数据管理功能是一项常见的应用。因此可以实现一个相对轻量化的设计实现表格的录入,为保证功能的可用性、界面友好性,总体的需求如下:
初九之潜龙勿用
2024/06/20
1520
在文件每一行开头增加字符串
首先,使用vim 打开某txt文件,输入冒号,并输入%s/^/,之后输入要添加的字符串即可
DoubleV
2022/03/25
1.1K0
Shell脚本循环读取文件中的每一行
While循环中read命令从标准输入中读取一行,并将内容保存到变量line中。在这里,-r选项保证读入的内容是原始的内容,意味着反斜杠转义的行为不会发生。输入重定向操作符< file打开并读取文件file,然后将它作为read命令的标准输入。
卡尔曼和玻尔兹曼谁曼
2019/01/22
5.6K0
LeetCode 2133. 检查是否每一行每一列都包含全部整数
对一个大小为 n x n 的矩阵而言,如果其每一行和每一列都包含从 1 到 n 的 全部 整数(含 1 和 n),则认为该矩阵是一个 有效 矩阵。
Michael阿明
2022/03/10
4470
LeetCode 2133. 检查是否每一行每一列都包含全部整数
Nginx重新编译添加模块
找到安装nginx的源码根目录,如果没有的话下载新的源码 http://nginx.org tar xvzf nginx-1.3.2.tar.gz 查看ngixn版本极其编译参数 /usr/local/nginx/sbin/nginx -V 进入nginx源码目录 cd nginx-1.3.2 以下是重新编译的代码和模块 ./configure --prefix=/usr/local/nginx--with-http_stub_status_module --with-http_ssl_module --w
CrazyCodes
2019/11/07
1.6K0
idea 删除一行快捷键_excel删除一行快捷键
以前习惯用eclipse,但是现在用了IDEA很不习惯,也不知道IDEA的快捷开发键。
全栈程序员站长
2022/10/04
2.1K0
idea 删除一行快捷键_excel删除一行快捷键
Fragment添加、删除、替换
前面一起学习了Fragment的创建和加载,以及其生命周期方法,那么接下来进一步来学习Fragment的具体使用,本期先来学习Fragment添加、删除、替换。 一、概述 在前面的学习中,特别是动态加载的时候,有提到FragmentManager和FragmentTransaction类,这里先来详细了解一下其到底为何物。 01FragmentManager 要管理Activity中的Fragments,就需要使用FragmentManager类。通过getFragmentMana
分享达人秀
2018/02/05
11.5K0
Fragment添加、删除、替换
python删除文本最后一行_用python删除文件中的最后一行
我创建了以下代码来查找文件中的行数,但是我不知道如何删除特定的行号。我是新来的python – 所以如果有一个更简单的方法 – 请告诉我。
全栈程序员站长
2022/08/30
7K0

相似问题

对多个数据库中的每一行表执行多个操作

10

当涉及到游戏开发时,有必要记住每一行代码吗?

20

Python保理脚本应该有多快?

20

缓冲消息并在重新连接后发送

10

将用户搜索保存到数据库

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文