实习生新人问些问题

2017-11-03 11:46:07 +08:00
 BadCat

要写一个数据库整合的工具 遇到了一个问题 2 张表 a 表的主键 id 是 1、2、3、4。算是一个类型表 b 表外键关联的 a 表的主键,结构根图片差不多, 然后 a 表的 id 更新了,成了 4、5、6、7 所以我 b 表关联的外键列该怎样更新呢

2887 次点击
所在节点    程序员
12 条回复
BadCat
2017-11-03 11:46:35 +08:00
anthow
2017-11-03 11:54:18 +08:00
划重点。。。lz 头像
HarrisonZ
2017-11-03 11:54:48 +08:00
如果用了外键,数据库会自己处理。如果没有用外键,自己把 A 表变动的对应关系记录一下,然后在 B 表对应着变更不就可以了。数据量不大的话,一次 fetch 出 A 表所有的 id,id 为 key,变更后的 id 为 value,构建一个 hashtable,然后取出 B 表数据,直接用 hashtable 的 k/v 替换一下就好了
BadCat
2017-11-03 12:01:23 +08:00
@HarrisonZ 没有外键,外包用的 ef。数据量非常大,a 表更新后的 id 都是没法掌控的,所以这点就很烦。记录变动的话要怎么记录?放在 dictionary 中,key 是原先的 a 表 id,value 是更新后 a 表的 id,然后判断 b 表外键 如果是 1 的话 就等于 这个 1 ( key )所对应的 value 吗。不知道是这样意思吗
HarrisonZ
2017-11-03 14:59:14 +08:00
@BadCat 就是你理解的意思,数据量大就分段慢慢跑吧,数据这种小心点,一旦 id 变了就找不回了。先备份再操作。
BadCat
2017-11-03 15:04:08 +08:00
@HarrisonZ 好的 谢谢
hbn
2017-11-03 15:21:26 +08:00
重点是头像 楼主也是老司机
zhangjiha
2017-11-03 15:27:37 +08:00
我是因为楼主头像进来的
JKeita
2017-11-03 16:30:35 +08:00
表设计就有问题,正常主键就不能改变
BadCat
2017-11-03 16:31:53 +08:00
@JKeita 因为要合并数据库,防止数据冲突
leitwolf
2017-11-04 11:29:43 +08:00
头像确实是重点,次要的数据库问题表示不懂:)
kyuuseiryuu
2017-11-05 17:42:03 +08:00
外连接查表生成新表就好了呀。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/403199

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX