我什么时候应该使用存储过程而不是直接在我的应用程序中编写逻辑?我想获得存储过程的好处,但我也希望我的应用程序逻辑不会分散在数据库和应用程序上.
在参考这个时,你能想到任何经验法则吗?
我总是害怕使用DELETE CASCADE,但随着我越来越自信(懒惰:D),我在想它有多糟糕,最好的做法是使用它还是我应该避免它并清理我的外键等老式方式(带存储过程)?
任何人都可以提供这些功能的明确解释/示例,以及何时使用它们?
我参与的项目的首席开发人员表示依靠级联删除相关行是不好的做法.
我不知道这有多糟糕,但我想知道你对它是否/为什么的看法.
如果任何行引用要通过FK删除的行,则无法删除行.
在执行DELETE语句之前,是否可以知道是否有任何行引用要删除的行?
我有两张桌子:
table1 (id, name, connte)
table2 (id, name, connte)
Run Code Online (Sandbox Code Playgroud)
他们通过连接table1.connte和table2.connte.每个都包含100条记录.
现在,如果我想从table1中删除id = 20的记录及其在table2中的相应子项,那么最好是执行以下操作:
DELETE d1,d2 FROM table1 d1 INNER JOIN table2 d2 ON d1.connte= d2.connte WHERE d1.id = 20
Run Code Online (Sandbox Code Playgroud)
或以下:
select connte from table1 where id = 20
--Store connte in a variable say aabc--
delete from table2 where connte = aabc -> execute this first
delete from table1 where id = 20 -> execute this second
Run Code Online (Sandbox Code Playgroud)
如果我想要删除的记录只有一个父项和一个子项(这里是table1.id = 20),那么对整个表进行内连接是不是很昂贵?
我正在从JAVA(所以JDBC)运行此查询,因此对于上述条件,运行多个查询或内部联接是否更昂贵(性能明智)?
注意:假设表没有参照完整性.所以,我没有使用级联删除.
性能是关键:在数据库内部级联删除/更新还是让 Hibernate/JPA 处理它更好?
如果级联在 DBMS 内部,这会影响查询数据的能力吗?
如果这很重要,我正在使用 HSQLDB。
sql ×6
cascade ×4
sql-server ×3
foreign-keys ×2
mysql ×2
database ×1
hibernate ×1
hsqldb ×1
jdbc ×1
jpa ×1
optimization ×1
performance ×1
postgresql ×1
t-sql ×1