Reputation: 9904
I have date_created and date_modified columns on each table in database.
What are advantages/disadvantages setting timestamp columns at database using MySQL triggers vs setting them at application layer using PHP?
Which is easier to maintain and have better time synchronization when deployed across on many servers?
EDIT: since Johan suggested setting timestamps in database is good, are these correct implementations? additionally, is it good practice to have date_created and date_modified on every table? or do you recommend adding them on certain tables?
date_created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
date_modified TIMESTAMP NOT NULL DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
Upvotes: 3
Views: 1497
Reputation: 157918
is it good practice to have date_created and date_modified on every table?
Sure.
I'd throw in date_deleted also.
Update timestamp column in Application or Database?
Depends on how you plan to use these fields.
If it's some article and you want to show last editing time, you should never use mysql timestamp features as it will end up with unexpected results, like same update time in all records in database.
Same for the trigger.
don't be lazy, set this field manually. It will cost you nothing as you already using ORM to do it, don't you?
Upvotes: 0
Reputation: 53870
It's your discretion regarding which tables should have timestamp columns. In our production environment, every table has these columns.
However, we also set the values in code. I believe that this was done so that the dates were in full control of the application. Know that either way you do it, replication will be fine. If you do set the dates in the application and you want DB server time instead of application server time, simply set the columns using MySQL's NOW() function.
Upvotes: 0
Reputation: 76703
Timestamp in the database.
If you replicate in a master-slave setup, database timestamps are correctly replicated (using the original timestamp).
You do not (!) set timestamps in triggers.
Instead you specify them in the table definition, MySQL will automatically set the correct timestamp on insert and/or update.
You only have to set them once, when you create (or alter) the table and that's it.
Could not be easier.
Upvotes: 2