Author |
Topic |
Michael Valentine Jones
Yak DBA Kernel (pronounced Colonel)
7020 Posts |
Posted - 2011-08-12 : 09:28:18
|
The Law:Triggers are always badly written, unless it is a re-write.The Reason:Triggers are very challenging to write, but good SQL developers who are up to the challenge avoid them like a rabid Rottweiler. Therefore, the only people that write them are developers who are not up to the challenge.Just an observation after re-coding a trigger that was causing a 1 million row update to run for 30 minutes in SQL 2000 and about 16 hours in SQL 2008. With the new version of the trigger, the update finished in about 25 seconds, just about 5 seconds longer than with no trigger at all.CODO ERGO SUM |
|
webfred
Master Smack Fu Yak Hacker
8781 Posts |
Posted - 2011-08-12 : 09:31:57
|
Trigger Ergo Sum No, you're never too old to Yak'n'Roll if you're too young to die. |
|
|
sunitabeck
Master Smack Fu Yak Hacker
5155 Posts |
Posted - 2011-08-12 : 09:52:26
|
I plead guilty. I sometimes invite the rabid Rottweiler in for auditing purposes.http://www.youtube.com/watch?v=CZOeWFBy75A |
|
|
blindman
Master Smack Fu Yak Hacker
2365 Posts |
Posted - 2011-08-12 : 10:45:54
|
"Triggers are very challenging to write, but good SQL developers who are up to the challenge avoid them like a rabid Rottweiler."Absolutely disagree. I don't hesitate to implement a properly written trigger when it is the best solution to a problem. I'd rather put a data rule in a trigger than in a sproc.________________________________________________If it is not practically useful, then it is practically useless.________________________________________________ |
|
|
mmarovic
Aged Yak Warrior
518 Posts |
Posted - 2011-08-24 : 13:27:03
|
quote: Originally posted by Michael Valentine Jones The Law:Triggers are always badly written, unless it is a re-write.The Reason:Triggers are very challenging to write, but good SQL developers who are up to the challenge avoid them like a rabid Rottweiler. Therefore, the only people that write them are developers who are not up to the challenge.CODO ERGO SUM
I like it. I hope you don't mind if I use it. I will mention the source each time, I promise. MirkoMy blog: http://mirko-marovic-eng.blogspot.com/ |
|
|
Kristen
Test
22859 Posts |
Posted - 2011-08-24 : 13:44:06
|
"Triggers are very challenging to write, but good SQL developers who are up to the challenge avoid them like a rabid Rottweiler."Tommy-rot.Our triggers are written by code-generation-code, and are perfect. End of. ! |
|
|
JimL
SQL Slinging Yak Ranger
1537 Posts |
Posted - 2011-08-24 : 14:55:16
|
"Tommy-rot."Such Language Kristen JimUsers <> Logic |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2011-08-24 : 15:22:33
|
I tend to implement much of the business logic into triggers.The main reason is that we allow the developers to write any number of one-task application to work against the database, and not all them them are the brightest.When we code much of the business rules in triggers, it doesn't matter which application that access the database, the data will be consistent. Even if the developers edit the data manually in ssms.Last count gave some 70 applications working against same database. N 56°04'39.26"E 12°55'05.63" |
|
|
Kristen
Test
22859 Posts |
Posted - 2011-08-24 : 17:42:12
|
quote: Originally posted by JimL "Tommy-rot."Such Language Kristen
Apologies for offending you Jim |
|
|
mmarovic
Aged Yak Warrior
518 Posts |
Posted - 2011-08-25 : 05:54:00
|
quote: Originally posted by SwePeso I tend to implement much of the business logic into triggers.The main reason is that we allow the developers to write any number of one-task application to work against the database, and not all them them are the brightest.When we code much of the business rules in triggers, it doesn't matter which application that access the database, the data will be consistent. Even if the developers edit the data manually in ssms.Last count gave some 70 applications working against same database. N 56°04'39.26"E 12°55'05.63"
I have different approach. We give developers permissions to stored procedures and views, not to tables.MirkoMy blog: http://mirko-marovic-eng.blogspot.com/ |
|
|
Transact Charlie
Master Smack Fu Yak Hacker
3451 Posts |
Posted - 2011-08-25 : 09:34:49
|
quote: Originally posted by mmarovic
quote: Originally posted by SwePeso I tend to implement much of the business logic into triggers.The main reason is that we allow the developers to write any number of one-task application to work against the database, and not all them them are the brightest.When we code much of the business rules in triggers, it doesn't matter which application that access the database, the data will be consistent. Even if the developers edit the data manually in ssms.Last count gave some 70 applications working against same database. N 56°04'39.26"E 12°55'05.63"
I have different approach. We give developers permissions to stored procedures and views, not to tables.MirkoMy blog: http://mirko-marovic-eng.blogspot.com/
Huh? Who writes your new database code if your developers can't access tables? Or do you not class database developers as developers here? Or do your DBA's do all your database development.Assuming you mean -- all 'application layer' developers here???Charlie===============================================================Msg 3903, Level 16, State 1, Line 1736The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION |
|
|
mmarovic
Aged Yak Warrior
518 Posts |
Posted - 2011-08-25 : 11:42:30
|
Well, it depends on company, not each one has the same process. For example in Monster.com we had database coding strandards, templates and database engineers assigned to each project covering around 50 developers. We had tools extracting changes from version control system, db branch. Then we had strong code review policy. After we made a revision, developers had to apply changes we requested. After the release, we picked specific topic that needed enforcment and training and selected developers for additional training. In addition to that, we discussed which rules had to be added, modified or occassionally omitted from the database coding standards.MirkoMy blog: http://mirko-marovic-eng.blogspot.com/ |
|
|
mmarovic
Aged Yak Warrior
518 Posts |
Posted - 2011-08-25 : 11:49:21
|
About tables: In Monster developers accessed tables, but they had to put code in stored procedures. In a company producing billing system for telecom operators, it was database team that wrote stored procedure code, and developers could just execute stored procedurs or select data from views. However that was a process in division I was working for. In another division process was different, and the code quality was different as well.MirkoMy blog: http://mirko-marovic-eng.blogspot.com/ |
|
|
blindman
Master Smack Fu Yak Hacker
2365 Posts |
Posted - 2011-08-29 : 10:24:11
|
quote: Originally posted by mmarovicI have different approach. We give developers permissions to stored procedures and views, not to tables.
Uhm....how do you think restricting access to views avoids the violation of business rules not implemented by triggers?________________________________________________If it is not practically useful, then it is practically useless.________________________________________________ |
|
|
mmarovic
Aged Yak Warrior
518 Posts |
Posted - 2011-08-29 : 15:34:34
|
quote: Uhm....how do you think restricting access to views avoids the violation of business rules not implemented by triggers?
They can select data from views, for data modification they can just execute procedures. Actually, in most cases they also read data using procedures. Business logic is implemented by procedures.MirkoMy blog: http://mirko-marovic-eng.blogspot.com/ |
|
|
blindman
Master Smack Fu Yak Hacker
2365 Posts |
Posted - 2011-08-29 : 16:36:47
|
OK. Your views are read-only then.________________________________________________If it is not practically useful, then it is practically useless.________________________________________________ |
|
|
russell
Pyro-ma-ni-yak
5072 Posts |
Posted - 2011-08-29 : 22:58:23
|
[code]Create Trigger mvjTriggerOn MyTable -- every tableFOR INSERT, UPDATE, DELETEASIF SUSER_NAME() = 'Domain\MVJ'BEGIN Rollback RaisError ('Sorry Michael, we don''t care if you ARE an admin. Noooo don''t drop me.', 16, 1)END[/code] |
|
|
Michael Valentine Jones
Yak DBA Kernel (pronounced Colonel)
7020 Posts |
Posted - 2011-08-30 : 11:19:51
|
quote: Originally posted by russell
Create Trigger mvjTriggerOn MyTable -- every tableFOR INSERT, UPDATE, DELETEASIF SUSER_NAME() = 'Domain\MVJ'BEGIN Rollback RaisError ('Sorry Michael, we don''t care if you ARE an admin. Noooo don''t drop me.', 16, 1)END
If only the triggers I get to deal with were so well written... CODO ERGO SUM |
|
|
russell
Pyro-ma-ni-yak
5072 Posts |
Posted - 2011-08-30 : 11:51:36
|
lol |
|
|
|