哪个更好,自动增量数据库还是通过代码? 我的导师告诉我,让数据库尽可能“愚蠢”更好,让程序完成所有工作。不是相反吗?
答案 0 :(得分:3)
我认为让数据库"尽可能愚蠢"是一种错误的做法。锁定数据库与使用不连贯数据的次数越多,您就越安静。
数据库为您提供了许多工具(如外键),以确保数据的完整性和一致性,而无需使用代码。它可以保护您,以防您的代码不完美。更好的是,如果有人使用您的数据库编写新代码,他可以通过查看其结构来了解您创建数据库时的意图。
所以,回答你的问题,对我而言,我认为自动增量更好。数据库可以轻松地管理它,它可以帮助您完成这项任务。
答案 1 :(得分:0)
我同意数据库应该是"愚蠢的"尽管如此,无论如何autoinc是一个例外,就好像你将这个任务留给代码,你冒着很多冲突的风险。 想象一下需要增加相同字段的两个线程/进程:您必须手动处理冲突。
具有2个流程的工作流程:
1. p1 get the field value and put in a variable (var==FIELD==0)
2. p2 get the same field (var==FIELD==0)
3. p1 increment the value (var++)
4. p1 store the value (FIELD==1)
SCENARIO 1
5.a p2 store the value as is (he "think" nothing changed) (FIELD=0) !!! ERROR reset value
SCENARIO 2
5.a p2 increment the value (var++)
5.b p2 store the value (FIELD==1) !!! ERROR lost 1 increment
每个"规则"并且最佳实践有其例外,您需要分析上下文以获得正确的选择。
答案 2 :(得分:0)
数据库列中自动增量的问题是应用程序不知道该值,因此需要额外的客户端 - 服务器通信来获取它。这可能会降低您的申请速度。它还限制了某些类型的继承映射。使用其他一些增量方法(序列)可以改善这一点,但缺点是表格ID中存在差距。 请阅读this优秀帖子,了解基本自动增量的替代方案。