我有一个结构看起来像
人物
ID int
Name nvarchar
电话
ID int
PersonId int
Number nvarchar
Make nvarchar
Model nvarchar
MultiSim bit
一个人可以有很多电话
目前,我的逻辑是当用户单击“保存”按钮时,应用程序接收Person对象的一个副本(其中包括一个数组电话)。
如前所述,这种关系是一对多的。因此,在保存时,只有一个人,所以很容易更新这个人(不需要删除和重新添加)。
目前,我删除了所有的手机相关的人,并重新添加他们。
我所看到的负面情况是:
我找不到任何东西来解释我目前的做法是否错误。我应该关心身份证越来越大了吗?我是否应该用我想要保存的对象来检查当前的手机对象呢?
发布于 2019-04-29 05:01:01
我总是使用删除所有和重新添加的方法。
发布于 2019-04-29 04:23:58
如果我对这种方法有问题的话,它将不是电话id的计数器,而是需要额外时间的事实。虽然有几个电话号码可能没什么大不了的(我无法想象在任何实际情况下有超过10个的人),但请记住,如果您必须保存所有的Person实例,那么现在它不再是一个循环而是一个嵌套的循环。
如果您决定要在与Person的一对多关系中删除和重新创建订单,那么在保存上将再次完成更多的工作。它的可伸缩性不是很强,因此您可能会有一天,您的客户端有10秒或更长的等待时间,否则就会直接保存到数据库中。
你问为什么这不应该是一个正确的方法,但我向你逆转了这个问题。为什么您不简单地跟踪哪些电话号码已经添加或删除,并相应更新?是否有特别的理由这样做,或根本的原因保持代码更简单?由于从长远来看,这最终可能是一个问题,我鼓励你考虑在必要时简单地添加和删除。
发布于 2023-03-21 06:52:07
额外的时间被占用,因为它必须删除,然后重新添加每一个电话,无论是否有修正案。
在只需要一个更改的地方进行大量更改是效率低下且速度慢的。
在不需要任何东西的情况下做大量的改变是愚蠢的(对不起)。
数据库必须记录您所做的每一个更改,如果您要删除所有内容并将其全部重新添加,它基本上是做了两次这样的操作,没有任何理由,如果没有任何实际更改。与仅仅读取数据库相比,在数据库中编写任何东西都非常非常慢(更新总是涉及磁盘活动)。
此外,如果您的数据库正在进行任何类型的“数据审核”(其中的更改自动转移到“历史”表中),那么这种方法将生成大量的“箔条”,任何试图调查实际问题的人都必须“费力地”通过。(去过那里,做了那件事;而不是“有趣”)。
理想情况下,您不应该更改任何记录的主键(ID)。
在创建记录时应该分配它,并且应该保持不变,直到记录最终被销毁。想象一下,如果你的银行“重新编号”每个人的支票帐户,而其他人关闭他们的混乱!
如果有任何其他表引用您的人物_电话表,并且您正在正确地使用外键,那么您就根本无法删除它们!
正确执行此工作;更新用户更改的任何行,插入它们添加的任何行,并删除它们删除的任何行。
当此过程发生时,自动递增的电话ID会越来越大.我应该关心身份证越来越大了吗?
可能不会。
这取决于它有多大。一个int列的值将高达20亿(2^31-1)。如果你超过这一点,事情就会变得有点“混乱”。
在这种情况下,您可能还好,但是如果要将相同的逻辑应用到其他地方,这可能是一个完全不同的故事。
https://softwareengineering.stackexchange.com/questions/391117
复制相似问题