如果数据表每一个字段,除去主键字段外都带有唯一约束,那增加与修改的代码流程怎么写是最好的?

2021-07-14 08:47:31 +08:00
 tctc4869

有一个数据表,有 n 个字段,有主键字段,主键内容自动生成。并且还有 n-1 个字段,这些字段都带有自己的唯一约束,并且这些字段的内容不是自动生成的,是人工录入的,现在要求是实现对该数据表的增删改查的页面。

遇到这种情况,那增加与修改的代码流程(也就是最终调用 insert 和 update 语句的方法),怎么写是最好的?如何把处理该情况的代码流程写的通用一点(封装成一个专门处理此情况的 api 方法)?

还是每个字段的修改,在 ui 界面上,都用单独的对话框进行修改?

1614 次点击
所在节点    程序员
13 条回复
lanlanye
2021-07-14 10:06:25 +08:00
UI 怎么做和你的接口有什么关系?有重复就报错不就完事了
tctc4869
2021-07-14 10:17:41 +08:00
@lanlanye “有重复就报错不就完事了”,这不跟什么都没说一样吗
timethinker
2021-07-14 10:24:33 +08:00
是每一条数据的组合都唯一吗?还是某一个字段的值是唯一的?
一般如果违法数据库约束会有报错信息,你 catch 住相关的异常然后响应给客户端对应的结果就行了吧。
tctc4869
2021-07-14 10:40:42 +08:00
@qwe520liao 不是组合唯一,是除去主键的每个字段有独立的唯一约束
数据库约束会有报错信息,不过还有一种就是查询检测,用 trycatch 检测和通过查询检测,哪个更好一些?
timethinker
2021-07-14 10:48:42 +08:00
建议查询,一般如果在事务内数据库报错了,会导致事务回滚,显然 try-catch 不适合,你查询的话可以给到客户单更详细的信息。
saulshao
2021-07-14 10:49:42 +08:00
@tctc4869 4# 这谈不上哪个更好。
出于效率的考虑,一般直接 try...catch 就行了。除非有特别的需求,才用查询检测。
原因: Try...catch 代码相对简单一点。
tctc4869
2021-07-14 10:57:15 +08:00
@saulshao trycatch 检测的话,不同的数据库唯一约束报错信息可能不一样,不一定唯一约束报错信息会有指向报错的字段是哪个
tctc4869
2021-07-14 11:02:45 +08:00
@saulshao 如果给 orm 扩展通用性 Api 方法的话,tryCatch 检测是否存在,显然就比较麻烦一些
lanlanye
2021-07-14 11:09:44 +08:00
@tctc4869 我不懂你这个需求是基于什么考虑的,难道你对表的增删改查不是以行为单位而是以字段为单位吗?如果这样的话为什么要用关系型数据库?
lanlanye
2021-07-14 11:16:34 +08:00
@tctc4869 如果需求是找到重复的字段具体是哪个,Django 的 ORM 就有类似功能可以参考,静态语言我就不清楚了。
tctc4869
2021-07-14 11:18:41 +08:00
@qwe520liao 我目前想到的是有多少字段就差多少次。

那么增加修改用查询方式,假设数据表字段有 8 个,除去主键,每有一个唯一约束字段的内容就查询数据库验证,那就得搞 7 次验证,验证增加或修改的数据记录是否在数据表存在,这个验证流程能不能缩短一些。
saulshao
2021-07-14 13:43:28 +08:00
@tctc4869 7#这就是我说的,有特别需求.....
你的程序中如果只有数据库的 DDL 里才知道到底哪些字段是唯一索引,那么你就需要把这种定义放在代码里。
这种操作会给你的开发带来更多工作量,同时还会给你的整个开发小组的管理带来更多额外的流程。
akira
2021-07-14 21:05:44 +08:00
根据你的需求, 增加删除 产生的实际 sql 代码其实是类似的,做个通用方法去处理就是了

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

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

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

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

© 2021 V2EX