I once had a table and it was shiny and beautiful. It held all the financial transactions for an organization. And then we started loading data into it.
In the current month, they can state and restate values as often as they want. In the final 10 days of a month, they’d restate numbers -> run ETL processing -> review reports several times a day. Once the month is complete, then the books are sealed and they can’t modify values.
It’s amazing how much financial data a financial services firm generates… Something we didn’t realize with our test data set was the volume of data was going to make their month end procedures untenable. It took an increasingly long time to delete out the “current month’s data” prior to replacing it with the new trial run.
We had to do something to make it faster for processing without breaking the uncatalogued list of “who knows what” that all depends on the MonthlyAllocation table. I decided to play magician and whip the tablecloth out from underneath them. I went old-school and used a Partitioned View. The data already had an IsComplete flag so I made two tables – each with contrary check constraints: MonthlyAllocationComplete, MonthlyAllocationInComplete
I then created the partitioned view with the same name as the original table: MonthlyAllocation. No process was any the wiser about the physical change we made to the database. No reports broke, none of the analysts with direct access reported any issues with that “table” before or after.
Cool story bro, but where you going?
What if they had a naming convention there, tbl_MonthlyAllocation? Now what? Do we spend lots of man hours going through every ETL, every report, every ad-hoc spreadsheet in the organization and updating them to use vw_MonthlyAllocation? And then of course all those changes go through the Change Board and that’s always a quick and painless process.
You boss might ask: What’s the reward to the company for all that work again?
The other option becomes we leave this view named as tbl_ and not spend all that time testing, updating and deploying code. Which becomes an amusing anecdote you explain to all the new hires, and those with short attention spans, that have to work with the database as to why you are inconsistent with the naming of objects
Or you don’t double encode objects with redundant metadata. The database will happily tell you what is a table, what is a view, what is a table valued function, etc.
Naming conventions are good, just don’t paint yourself into a corner with them.
Brent here (the guy you’re referring to in the question).
The reason I tell you not to add tbl to the front of your table names is the same reason I’d say not to add child to the front of your child’s name. You don’t call them childJohn and childJane. Not only does it not add any value, they may not be a child later in life – and your objects may later become views.
This is a very subjective argument, but here is my take: the tbl prefix is useless.
How many scenarios are you looking at code and you can’t tell if something’s a table or something else?
What value does tbl add except that when you look at a list of tables in Object Explorer, you have to do more work to find the one(s) you’re looking for?
Some people say they want it to be clear in their code when they’re dealing with a table or a view. Why? And if this is important, why not only name views in a special way? In most cases, they act just like tables, so I see little value in distinguishing.