DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: ZMskyuza
今日帖子: 25
在线用户: 11
导航: 论坛 -> 数据库专区 斑竹:liumazi,waterstone  
作者:
男 fb4819 (方明) ★☆☆☆☆ -
盒子活跃会员
2024/5/15 10:32:18
标题:
主从表更新顺序的问题 浏览:591
加入我的收藏
楼主: 求教下Sql Server主从表更新顺序:
主表:进仓(进仓ID,件数) //件数是进仓明细件数之和
从表:进仓明细(进仓明细ID,进仓ID,件数)
目前更新语句这样写:
  BEGIN TRAN
  Insert|Update|Delete 进仓明细
  --计算进仓明细.件数之和
  update 进仓.件数
  COMMIT
但百度却告诉我应该先更新主表,再从表,这样计算主表的件数就很麻烦,请教各路大神,应该采用哪种顺序?
----------------------------------------------
vvvvvvvvvv
作者:
男 xlonger (xlonger) ★☆☆☆☆ -
普通会员
2024/5/15 11:11:14
1楼: 我不懂数据库。

你先自己计算好 件数之和,然后依次更新主表,从表 不行吗?
----------------------------------------------
我打的是酱油,而不是别的什么油。
我灌的是口水,而不是别的什么水。
我聊的折腾不是那个不折腾的折腾。
我说的阿娇不是那个邓玉娇的阿娇。
3个代表,6个为什么,9个肠胃炎。
D性强的领导干部都不喜欢热比娅。
我特别要讲的是,屁民网黄色论坛是我经常上网必选的 网站之一
作者:
男 guth (落叶) ★☆☆☆☆ -
普通会员
2024/5/15 11:26:34
2楼: 个人觉得,插入记录肯定是先主后从,删除记录是先从后主,修改记录怎么方便怎么来。当然为了保证一致性,肯定要在事务中处理。
不知道对不对?
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/5/15 13:03:01
3楼: 所以你为什么会以AI为权威呢?搞研究的态度就是首先请质疑所有权威。
然后拉回到更新上,既然你的主表包含了从表的统计数据,那肯定要先更新明细,再更新统计。只要你能保证数据一定同步就没问题。
之所以说要先更新主表,那是因为一般而言,假如你以基础数据作为主表,以业务数据作为从表的话,一旦基础数据发生改变,那么必然要先动主表再动从表。
举例:数据字典表,所有表都可能会牵涉到这个表中的数据,是基础表的基础表,算得上是最主的主表。
这时候,假如你要更新某个既定字段,那么所有关联表就需要一并更改。
或者还有其他情况,具体需要依据你的业务需求作出不同方式的处理。
而不是死抱着教科书或者AI。
----------------------------------------------
--
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2024/5/15 13:56:18
4楼: 首先, 作为多年DBA经验, 建议做主从库, 不要做主从表.  
主从表考验的是程序员代码控制, 逻辑思维, 还要考虑事务, 统一问题, 使用过程中, 就是一味在那找原因, 叹后果,  根本不是解决问题, 而是由一个问题, 引伸另一个大问题.

主从库就方便了, 配置好主从, 全部由sql自己处理, 它自己会同步.
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/5/15 15:47:11
5楼: 主从库?那是数据备份。。。
真要是用主从库替代主从表,那就是疯了。
连主从表都搞不来,去折腾主从库,那更加混乱的一批。
也许是我孤陋寡闻吧,我还是第一次听人用主从库替代主从表的。
----------------------------------------------
--
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/15 16:15:35
6楼: 楼主的主从表的设计有问题。

1. 这个主从是什么关系?为啥要主从?莫非就是为了那个数量的和?
2. 数量的和根本就不应该写入数据库。既然从表里面有了数量,数量和就是冗余数据。数量和是客户端需要的时候,计算出来显示给客户端看的,留在数据库里没有任何意义,而且还带来麻烦和潜在出错的可能
----------------------------------------------
-
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2024/5/15 16:21:27
7楼: 为什么会有从表设计, 什么需求才一份数据, 装两个表上?  
读写分离? 

在没十足把握情况下, 主从表慎用,
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 learndelphi (beside) ★☆☆☆☆ -
盒子活跃会员
2024/5/15 16:47:47
8楼: 先主表 再从表 然后再主表 这样可以吗?
----------------------------------------------
-
作者:
男 wg961423 (麦子仲肥) ★☆☆☆☆ -
盒子活跃会员
2024/5/15 17:20:00
9楼: 在没有外键的情况下,谁先谁后都可以,有外键的情况下,必须先主表,再从表。
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/5/15 17:22:48
9楼: 统计数据入表,很普遍的需求,比如连许统计某个时间段的流水情况,为了提高性能,就可以单独做几个统计表来保存统计数据。
跟物化视图的概念差不多,只不过引擎会定期自动更新物化视图,而静态表则需要开发者手动更新而已。


至于更新数据,一个原则就是尽量减少IO次数,既然楼主的数据里,主表保留了统计数据,那肯定要先更新从表,再更新主表。没有必要一定要有一个数据。只要更新的时候在一个事务里,能保证数据不会因为各种原因出现不同步的情况就行了。
----------------------------------------------
--
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/15 19:40:45
10楼: 没有外键关系的,不能算作是主从表。

至于统计数据,照理应该是需要时才统计,而不是写入数据时把统计数据也写入。说个例子:写入的数据,可能是会变的,那么,这个时候,你的统计数据要不要变?

另外,统计数据如果非要写入数据库,可以单独为它建立一个表。但这个根本不是所谓的主从表。
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2024/5/15 20:25:42
11楼: to 10楼:
当然,楼主的这个需求挺奇怪。不过看不到他的系统架构文档,也不知道他的意图是什么,只能照着他的需求给建议了。
数据库挺久不玩了。

至于说统计数据,可能我说的有点模糊。我说的统计数据很多时候并不需要实时统计那种。
举个例子:
比如一个进销存系统,每时每刻都有交易流水。
但是运营可能会有一个这样的需求,即要求每天、每月、或者每个季度所有商品的销售统计数据、加权数据等等。然后以此数据形成一个趋势图,用作市场部门分析使用。
比如持续增加的商品则需要加大采购数量、持续减少的商品则需要降低采购数量。
又比如有些买了A就会买B的商品,又有些因为季节性的,比如冰棍什么时候进入销售高峰等。

当然,也可以临时统计,但是很多时候在数据量超大的时候,临时统计太过于消耗系统资源。
这种数据,一般会在一个固定的时候用一个计划任务提前统计好,然后放在一个单独的表里面存储。要用的时候直接提就可以。
说白了就是用空间换时间。
----------------------------------------------
--
作者:
男 steven2 (steven) ▲▲▲▲▲ -
普通会员
2024/5/15 21:21:44
12楼: 楼上说的不错,


DBA haha ,
----------------------------------------------
-
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/16 1:16:51
13楼: 11 楼说的那种需求,也完全不需要在写入明细数据的时候就马上计算统计数据然后写数据库。

那种需要每周,每月统计的数据,倒是可以单独建个统计表,如果是在数据库里面做,专门写一个存储过程,定期跑一下。然后客户端只管查询统计结果了。

不过如果我来做,我还是选择用程序来做而不是用数据库存储过程来做。
----------------------------------------------
-
作者:
男 gaono1 (晕乎) ▲▲▲▲▲ -
普通会员
2024/5/16 2:41:22
14楼: 增删改单条明细之前同步增改一次主表记录,不要单独汇总明细再同步主表,这是考虑数据库多用户、多线程、锁、表约束等情况下最安全可靠的方法。
----------------------------------------------
-
作者:
男 shileizi (sl) ★☆☆☆☆ -
普通会员
2024/5/16 8:38:14
15楼: 看一下 Data Abstract,就是可以自动处理这种主从表的更新顺序的
----------------------------------------------
-
作者:
男 wk_knife (wk_knife) ★☆☆☆☆ -
盒子活跃会员
2024/5/16 8:55:17
16楼: 8楼就行了,难道还想玩出花来?
----------------------------------------------
-
作者:
男 lsh341999 (虫子) ★☆☆☆☆ -
普通会员
2024/5/16 10:36:31
17楼: 在线版
主从分离*主类别
http://www.9pas.com:8888/?OpenRunForm=9D49CE6A-2DC5-4F6B-93AB-F39ACBB4D50A&UserName=AllowLoginFreeUser&PassWord=123
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 lsh341999 (虫子) ★☆☆☆☆ -
普通会员
2024/5/16 10:37:11
18楼: 主从分离*子类别
http://www.9pas.com:8888/?OpenRunForm=88F4480D-95A4-4D9A-87D8-F11FE76B3CB2&UserName=AllowLoginFreeUser&PassWord=123
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 lsh341999 (虫子) ★☆☆☆☆ -
普通会员
2024/5/16 10:37:36
19楼: 单据主从
http://www.9pas.com:8888/?OpenRunForm=D8734B37-AC27-4CE0-9DEC-474BD3BAD5DA&UserName=AllowLoginFreeUser&PassWord=123
----------------------------------------------
就怕想不到,没有做不到的
作者:
男 sxqwhxq (步惊云) ★☆☆☆☆ -
普通会员
2024/5/16 13:16:54
20楼: 什么是主从表?
所谓关系型数据库,很重要的一个基础概念是关系,那么什么是关系?关系主要指的就是外键。
而主从表的本质就是外键,外键保证了从表某字段取值始终来源于主表的主键字段值。主表就是主键所在的表,从表就是外键所在的表。
定义从表外键时,有一个更新和删除策略,这个策略影响主表数据如何去影响从表数据,即是否不允许更新、删除操作还是采取级联式更新、删除。
一般这样定义外键:不允许删除,级联式更新。禁止删除即如果从表存有的记录如果引用了主表主键字段,则主表不允许删除此外键字段对应的记录,除非从表记录已经删除了这些引用主表主键的记录;级联更新即,主表更新了主键记录,则从表引用此字段的所有记录对应字段值自动更新。这样就从机制上保证了两表数据的一致性和完整性。
因此,楼主的问题,解决的根本之道,就是定义好主从表的外键关系,然后在delphi中使用批更新和事务,这样无论你更新主表数据还是更新从表数据,都会证你的数据的绝对正确性。
尽管很多大神很瞧不起CURD,但写程序,还是要掌握基本的数据库常识,特别要处理好关系型数据库的各表关系,否则程序上线后,会出现很难定位的错误,这样错误一般不会发生,等到符合特定的条件触发错误可能需要很长的时间,处理起来很棘手。
----------------------------------------------
-
作者:
男 fb4819 (方明) ★☆☆☆☆ -
盒子活跃会员
2024/5/16 15:15:04
21楼: 感谢各路大神,大概方向确定了,修改顺序还是得先主后从,尽量防止死锁
至于主表保留从表的件数之和是当初设计的时候是为了图方便,现在只能一步步弃用了
----------------------------------------------
vvvvvvvvvv
作者:
男 lxh524 (lxh524) ★☆☆☆☆ -
普通会员
2024/5/16 16:39:14
22楼: 先主后从!!!逻辑要清晰, 这样操作先上锁,后面的人改不动或者有提示。
----------------------------------------------
my computer
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行46.875毫秒 RSS