The only thing deep here is the water. But it’s good-old-fashioned shark-movie fun.
It won’t always be new movies, I promise. I could go on for pages about such classics as The Gladiator, Independence Day, Jurassic Park, Scream, Pulp Fiction, Face/Off, Lord of the Rings, and more. And I will, eventually. I’m going to try out a hosted WP service with my own domain soon, and then I’ll have more freedom to draw lines in the sand between the tech stuff and the fun stuff. But for now, you’ll have to settle for reviews of new or recent movies that we go enjoy semi-regularly at our local recliner-lined pizza-serving cineplex.
Without further ado…
Things Are What They Are
Let’s make something clear right off the bat. This is a popcorn flick. For those who aren’t up on the movie-goer lingo, that means it’s more or less mindless fun. It’s CGI-infused, big-screen big-sound action, with a few recognizable faces, a few up-and-comers, and a whole gaggle of extras. Throw in a Wilhelm Scream for good measure (fair warning: TVTropes link!). And yes, a black guy dies first.
Statham is no stranger to this sort of film. One might even say he’s built his entire career on them. But most of those are more the dark, gritty, pure action flicks. Yet he’s proven he can handle himself with the lighter, more humorous side as well.
The monster, the Megalodon, is sufficiently large and in-charge. It menaces and mangles effectively, and even outsmarts a hapless human or two. The premise around where and how they find this beast is mildly interesting, despite the occasional disregard for high pressure physics.
One of our favorite things to do with movies is to call out where we know the actors from. Here we have Dwight from The Office, and Travis from Fear TWD — we’re supposed to believe he’s Statham’s brother, which is a pretty hard sell, unless one is adopted. Oh, and that short-haired techie chick with the annoyingly hipster name? That’s the lead singer of ‘Evermoist’ from Pitch Perfect 3!
Where It Hits and Misses
We get some cinematic moments of shock and awe, a few tearful goodbyes of self-sacrifice, and a handful of suspenseful close-calls. And obviously, some big meaty carnage.
Unfortunately, the dialog falls a little flat sometimes, and the humor isn’t always snappy. Now, you’re not watching this for deep character development. The only thing deep here is the water. But there could have been a bit more emphasis on some key elements that would make the characters more memorable or relate-able.
Comparisons Are Fair Game
It’s quite natural to compare this to Jaws, and the many myriad of mimics that it spawned. Obviously, this film has no such aspirations, nor does it feel the need to shove this fact down the audience’s throat. Unlike, say, Sharknado, which tries way too hard to be “so bad it’s good” that it ends up looping back around to terrible again.
Furthermore, the actors understand this, which means that, while they do take their roles somewhat seriously, they allow themselves to have fun with it. Nobody’s trying to impress the Academy here. And frankly, nobody’s expecting you to watch more than once. Your enjoy it for what it is, and then you walk away.
The Verdict: one solid thumb up
Lets be honest. You’re going to watch this because you enjoy big sharks, Jason Statham, and/or ocean-themed action-adventures / creature-features. And you won’t be disappointed. It’s just good-old-fashioned shark-movie fun. Enjoy your popcorn, then go about your business.
Data isn’t literally everything. I mean it is, technically, but it’s not all super happy fun times, so we need to take a break once in a while and do something less neuron-intensive. Thus, my new segment: movie reviews! Because, despite what you may have read, all work and no play make Nate a dull boy. And yes, I promised you this blog would be professional. Mostly. I remember specifically using that word. So don’t wag your naggy finger at me. If you don’t like it, you can simply avoid the tags like #offtopic and #movies.
You, dear reader, may have guessed this already, but just in case you haven’t: We watch a lot of movies. Like, a lot. That new red MoviePass card came out just around the same time that our local cineplex remodeled itself into a “luxury theater” with the reserved reclining seats, dining service, and all that jazz. But besides that, when the day’s work is done and it’s time to chill, Netflix/Prime/Kodi are our M.O.’s.
Side-note, I’m running Kodi on LibreElec on a Dell micro-PC that I procured for $99 a few Black Friday’s ago. It’s puny by PC standards, but beefy by media-stick/RPi standards, so it works pretty well. We’re finding that our WiFi isn’t always quite up to the task of steadily streaming 1080p, but… meh. It’s generally usable. It serves up movies from my 3TB spinning-rusts on the circa-2014 gaming PC via Plex, which is a phenomenal app for the modern moviephile — if you haven’t checked it out, do it.
Let’s Get To It!
Back on topic. Off topic, I mean. We recently saw The Spy Who Dumped Me. I was excited for this movie as soon as I saw the poster: Mila Kunisand Kate McKinnon. Need I say more? Not really, but I will, because that’s presumably why you’re reading. I mean, I could watch these two actresses do just about anything for 2 hours. Let alone a buddy-action-comedy about international intelligence intrigue gone awry.
I first loved McKinnon in the Ghostbusters reboot, where she, no disrespect to the rest of the phenomenal cast, stole the show. That was a super fun movie too. (I’m not an SNL guy, though her Hillary impersonation was superb.) And Kunis, I’ve loved since she took over the voice of Meg in Family Guy. It didn’t hurt when the wife said she had a girl crush on her too.
This is somewhat of a directorial debut from Susanna Fogel (she has some credits, but nothing blockbuster-worthy, as far as I can tell), and it hits a lot of good notes. The acting is solid — especially, obviously, the two leads — the action believable, the punchlines not overly cheesy, the character development realistic, and the twists compelling, if a bit predictable.
The one notable gripe I have is the completely random and unnecessary bit of male nudity. And it’s not that I’m a prude; nudity can have its place in movies, if it serves a purpose. Look at Forgetting SarahMarshall — very similar to this instance, technically, but its purpose was clearly to emphasize the point of the character’s vulnerability and shamelessness. Contrasted to here, where it’s just some dude that Kate’s character hooked up with who turns out to be the first of dozens of agents to try to kill the duo in pursuit of the elusive “flash drive of doom” (which, surprisingly, is not yet a TvTropes trope, but I feel like it should be). There was literally no point.
On the whole, the movie was excellent — a fun ride through Europe on the tails of two hapless yet confident, inexperienced yet tough, and sometimes supremely lucky ladies who go toe-to-toe with agents of CIA, MI6, and the big scary Russian Mafia. We see these amazingly close best friends overcome frightening odds and tense situations by sticking together and encouraging each other, which is pretty awesome if you think about it. There’s a lot of negativity thrown around these days, whether it’s in the name of politics, social movements, or otherwise. Even your standard male buddy-cop movie usually hinges on the guys’ “banter” of tearing each other down (even in jest), and rarely does it truly bring out the best elements of their character.
Speaking of characters, the chemistry of these two women is top-notch. They’re different, to be sure, but it works in their favor. McKinnon is obviously more extroverted; “a little much” as someone tells her derogatorily, but that’s why we love her. Kunis is of course more subtle; coy, yet never a damsel in distress. One of the best bits of dialog in the movie, I think, comes from McKinnon’s positively bursting joy at seeing the head of MI6 is in fact a woman, who “hasn’t sacrificed one ounce of femininity!” (Gillian Anderson, of course, being very familiar with the role of an intelligence officer).
Now, I will normally try to avoid spoilers. Today I will simply tease that yes, while Kunis ends up falling for a guy, he’s proven worthy, and there’s no reason to fault her for it. If anything, it keeps us grounded in reality. Of course that reality quickly turns fantasy again in the “post ending”, but that’s for you to enjoy.
Highly recommended, two thumbs up.
Happy Hump Day! Now go watch some movies. Preferably this one. But hey, I ain’t the boss of you. Do your thing. And stay tuned for more!
Yeah so I missed the boat by a few days week. That’s pretty much my M.O. This month’s T-SQL Tuesday #100 is hosted by the author of sp_WhoIsActive and the creator of T-SQL Tuesday himself, the legendary, the incomparable, AdamMachanic.
The Year is 2026
Despite IT’s best efforts to kill the relational database, it’s still alive and kicking. Sure, it’s mostly in the cloud, and we’ve largely solved the problems of scalability, availability, and “traditional” maintenance, but the DBA still plays a critical role in the IT organization. He/she is more of an architect and an automator, someone who understands the business and development needs as they relate to data — its storage, availability, security, and performance — and can leverage cohesive data platform technologies to provide those services and meet those needs. But the fundamental issue of data quality still haunts even the best environments, because at the end of the day, when you rely on a human to enter text into a field, you’re gonna get garbage inconsistency. Thus, we’re still fighting that fight, if only to appease our “data scientists” and machine-learning models so that they stop whining about it.
SQL Server itself has evolved. After realizing that it was pretty silly to bolt-on a hacky “graph db” component to what is, at its core, a relational engine, MS broke that off into its own product, “Microsoft GraphDB Server”. But the good news is, SQL & GraphDB talk to each other seamlessly; in fact all of the data-platform products integrate and inter-operate much more smoothly than 10 years ago.
We finally have a single unified CE (Cardinality Estimator), which is intelligent enough to know which paths/plans to use for a given query, so we don’t need to mess with those awful trace-flags anymore. Indexes and Statistics are all but self-maintaining; the DBA rarely has to step in and mess with them. Part of the reason for this is that SQL Server yells at you if you try to make a GUID the clustering-key, or other such nonsense. =D
Columnstore is everywhere; traditional row-store (b-tree) indexes barely exist. JSON storage & indexing inside SQL Server is much better, but it’s still preferable to use a document-store DB if you can. Hierarchical structures (not to be confused with graphs) are easily implemented and supported, without having to resort to old hacky models. And user-defined functions (all types) perform nearly on-par with stored procedures.
They’ve replaced sp_who and sp_who2 with the code from sp_WhoIsActive, and made SSMS Activity Monitor suck less & actually be semi-useful as a basic first-response monitor. Profiler was officially killed off, and XEvents has come into general widespread usage — largely because MS finally dedicated some hard-core dev time to improving its GUI & making it much easier to use. Native Intellisense finally works, and works well, for all but the most obscure/weird things, and is much less chatty in terms of network traffic to/from the server.
And finally. FINALLY. Each database has its own TempDB.
Wait for the insurance co. to send your copy of REG 481, “Salvage Vehicle Notice of Retention by Owner”. They submit this to the DMV for you as well — but it helps to have a copy on-hand when you go in.
Get form REG 343, “Application for Title or Registration”. Fill out sections 1, 2, 4, and 9 (at least; others if applicable).
Get form REG 488c, “Application for Salvage Certificate or Nonrepairable Vehicle Certificate”. Fill out section 1 with your info (applicant) & your insurance co’s info.’
Make the DMV appointment. Bring all of the above. The receptionist will be impressed that you’ve made it this far. =)
Technically, the only things you actually need are the title & inspection certs. The DMV receptionist can give you all the rest, assuming they’ve gotten the insurance notice (481) on file. As I said, it doesn’t hurt to bring a copy. The receptionist can also help you if you’re unsure of what sections to fill on the forms.
The receptionist will give you REG 156 for your license plate exchange. You can just fill this out while you wait for the vehicle inspection, or to be seen by the next agent.
They’ll do the vehicle inspection, and the inspector will fill out REG 31.
With all these papers in hand, you’re finally ready to perform the transaction! You’ll pay the salvage title fee and the inspection fee, exchange your plates for new ones, and get a new registration card & stickers.
Congratulations, you now own your P.O.S. / clunker / beater / whatever term of endearment you choose to call your beat-up-yet-still-running car!
Here are some fun sample pictures of the paperwork.
As it turned out, some of the forms that I’d filled out ahead of time were completely unnecessary, while others were redundant or replaced. The thing that took the longest was waiting for the DMV to be notified that the vehicle was a salvage; apparently they’re a bit backlogged.
Here’s another little bit-o’-fun. The front license plate on the Honda (remember, I said part of the process is giving the plates over to the DMV in exchange for new ones?) is a biatch to remove without proper tools. I borrowed a standard pair of pliers from the nice young man behind the desk and struggled out there with the hex-nuts for nearly 15 minutes before he came out and said “Dude, don’t worry about it, we’ll call it destroyed”. FYI, the proper tool is a socket set with both SAE & metric, somewhere between 3/8 inch and 11mm. Apparently whoever installed this plate couldn’t decide between the two measurements systems so he/she used some of each.
Keeping your salvage vehicle does cost a bit, and is a small hassle. But in the end, it can be worth the trouble, IF:
You are able to get it repaired for a small portion of the total-loss offer (what your insurance pays you)
You don’t care about how it looks (because that’s usually what makes the repair job much cheaper — not caring about the body work!)
You don’t ever plan on selling it again (because that’s what the DMV make sure of when they register it as a salvage)
This is a story. And it’s longer than my usual post, so get comfy. I may be stretching my own rules, but I swear, I’ll tie it back to databases… somehow! Let’s get started.
Back in December 2016, I was in an accident in my 2011 Mazda 3. Ironically, I was driving home from filling up with gas, plus I’d just had some maintenance done the month before. These things are ironic because the car was a total loss. “Totaled”, in layman’s terms. It means the damage was such that the insurance company would rather pay off the market value of the car, than pay for the repairs. Or, put another way, it means that the cost of repairs would be within nominal range of the vehicle’s value. Short version, I’m not getting the car back. Oh, and that gas fill-up and mechanic bill? Money down the drain.
FYI, I was just fine – so the car and its safety-system did its job, protecting me from harm. Safety is an important part of choosing a car, kids… remember that.
Anyway, the car gets towed off to a local yard, I have a day or so to collect my possessions from it, and then they tow it somewhere else to the “salvage yard”, where it becomes somebody else’s property and problem. Insurance sends me the check for the value of the car. I was actually worried that it wouldn’t be enough to cover the loan balance, because I was still making payments AND I’d refinanced midway thru the original loan term, lowering the interest rate and payment but also extending the term. But, thankfully, the car’s value was above the loan’s balance, so I was able to fully pay it off and still pocket some cash.
Unfortunately, I didn’t have “loss of use coverage” on the policy – meaning, no free rental car. So I pay for it, for a little while. Fortunately, around the same time, my parents were getting ready to dump their old 2000 Honda Accord for a newer one, so we started talking and they offered to us as a gift. (Did I ever mention how awesome my parents are? They are!) Excellent.
Actually, this is the same car that I used to drive around in high school, so it’s got some memories.
Including, of all things, my very first accident! You’ll see why this is ironic in a few paragraphs.
Now, this car is what we call a “beater”. It’s 17 years old, it’s been through the wringer, it’s got 190k miles on it; but hey, it’s a freakin’ Honda. It’ll last another 50k at least, if maintained properly. And it has been – faithful oil changes, scheduled maintenance and beyond. But it’s not the safest vehicle on the road; the e-brake light comes on sporadically, and the airbag warning light is always on, so we don’t actually know if the airbags (particularly the passenger side) will work. So we need to start shopping for a new vehicle, at least for the wife.
I won’t go into car-shopping here, it’s a pain the arse unless you use courtesy buying services like those offered thru your credit-union or your some kind of “club membership” or whatever. Long story short, we got a 2017 Hyundai Elantra, in black, not brand-new but used with only 3k miles on it (apparently they had buyer’s remorse).
I will digress just for a second about black cars. They look pretty slick, even though they do show dirt a bit more than gray/silver (which is what the Mazda was). But you know what makes them look super-duper slick? Those “legacy” CA gold-on-black license plates. I convinced myself that I had to get those. Until I went to the DMV and found out that they’re $40 initially plus an extra $50/year on your registration fees. Jesus H… I get that they need to make money, but that’s ridiculous. Srsly. Ding the people that want those silly vanity plates, because I understand it adds a lot of processing/tracking overhead and makes the data (see? I told you I’d tie it back!) more complex. But this is the same old metal made by the same old prison inmates with a different coat of paint. Don’t pretend it actually costs anything extra for you to make them and pass them out. Anyway. Back to the story.
So we get the car, the wife’s driving it home. She’s heat-sensitive, and it’s been a pretty long, warm day. She ends up passing out for a second and veering off the road to the right shoulder, which is a small dirt embankment into some bushes and trees. Fortunately enough, she realizes what is happening and she’s able to bring the car to a gentle stop without actually hitting anything. So the car’s only real damage is some scrapes & bruises on the front end, a bit of scratching on the sides, and some dings to the under-carriage-panel. Now, me being the savvy consumer that I am, I’ve already added it to our insurance policy and added rental coverage. The new car goes into the shop before we’ve even had it a day, but we get a free rental while it’s there. (Ford Fusion – I like it alright, but the wife hates it; she has a bit of an anti-Ford bias.) Insurance covers about 1.5k damage for the bodywork, it gets done, we get it back in less than 2 weeks. Yay.
Alright, here’s where it gets fun interesting.
That was all back in December/January.
March rolls around, and I’m driving the Honda home from work. There’s a sudden pile-up of stopping cars in my lane and I can’t stop in time, so I run into the SUV in front of me. Fairly low speed, nobody panics, we pull over and start exchanging info and pictures. Now, my bumper is nearly detached, and my hood is quite scrunched in at the point of impact. This is because I hit his tow hitch, which stuck out from the rest of his rear body quite a bit. So even though he literally has a 1-inch scratch on his bumper, I’m looking at significant damage. But it seems mostly superficial, so I figure, well, I might not even need insurance, and he certainly doesn’t care enough to report it unless I do, so he leaves it up to me.
He helps me rope-up the bumper so it doesn’t fall off (he was such a nice guy, no joke!), and I start driving the rest of the way home. Quite a distance, mind you (I have a 60 mile total commute). After a little while, I start seeing smoke coming from under the hood. Fortunately it’s white, not black, so I know I’m not in terribly immediate danger. But I pull off to a gas station and take a look. Well, I can’t actually open the hood due to the scrunchy-ness, but I peer inside and see that there’s a significant bit of frame damage, and the radiator looks hurt. Sure enough, it would turn out that that was the biggest problem – the radiator (and compressor) would need to be replaced, and the frame around it needed repairing/re-welding.
This is not a small job. I take it to a body shop first, but as they look inside and see what I saw, they know that it’s beyond their scope, so they send me next-door to a full-service mechanic & repair shop. Next day, he gives me the estimate: $2.7k. Now, about this time, I’m talking with the insurance reps. I know they’re going to want to total this car – it’s KBB value is literally just over $2k, and these repairs are significantly more than that. What I was trying to ask them, and never got a straight answer, was whether we could file the claim for a lower amount, by asking for the mechanical repairs only. Remember, this car is a “beater”. We don’t really care how it looks, we just need it to run. And the shop was kind enough to provide that “bare-bones” estimate as well – only about $750.
But then my insurance adjuster did two things that were very insightful & much appreciated.
I have to give a shout-out to Safeco here, because throughout all of this, they’ve been immensely helpful and easy to deal with. (Even though I mentioned not answering my question in the paragraph above, as you’ll see, that was really my own fault for not understanding the process, and it was a moot point anyway!) So if you’re in the market for a new insurance policy, definitely check ‘em out.
First, because this shop was not an official “authorized partner”, she couldn’t accept their estimates as gospel; but, she could offer this newer “pilot” program whereby any shop (or even the customer) could submit pictures of the vehicle and the damage, and, provided enough detail and the right angles, a 3rd party estimator could assess the damage and estimate the cost. Great!
Second, she heard me out as I explained the concern with totaling the car, and understood that I really wanted to keep the car after simply getting it mechanically sound. But, she clarified, because I had collision coverage on this car, they (the insurance company) literally “owed me” the full cost of those repairs or the vehicle value, whichever is lower. So in fact, I would be doing myself a disservice and actually losing money if I tried to simply file the claim for the lower “bare-bones” amount, just to avoid the total-loss.
Instead, she explained, what you can do is keep the vehicle, even after it’s been declared “totaled“.
There’s a process and paperwork to this, and it involves the DMV, obviously. But because the insurance policy will still pay me the value of the vehicle, I should have more than enough to get the minimum repairs done and pocket the rest. Yay!
Now, the process. The CA DMV has done a fairly decent job of documenting this, but it’s still unclear (at least to me) what the order of operations is. There are 5 things you need:
Salvage title (which is different than the regular title, aka pinkslip)
DMV form REG 343, which you fill out yourself
REG 488c, which you also fill out yourself
Owner retention of salvage vehicle
REG 481, which your insurance company completes & sends to the DMV
Brake & light inspection (to make sure it meets road safety standards)
Certificates are printed & given to you by the inspecting shop
Full vehicle inspection (again, safety & compliance)
REG 31, which is completed by DMV personnel only
Number 4 can be done by many authorized 3rd-party shops, most of which also do smog tests and such things, so they’re not hard to find. The rest are DMV forms, as noted above. (#5 can be done either by the DMV or by CHP; but, CHP has quite a narrow list of “accepted” vehicles which they’ll inspect for this purpose, and honestly their appointment “system” for trying to get them done is horrendous, so it’s easiest to let the DMV do it.) But again, what’s the order in which I should do these things? Well, let me tell you!
First, you get that payout check from your insurance, and you get the repairs done. Then you take the car to a brake/light inspection place (#4 above), and get that “certificate” (much like a smog certificate, it’s an “official” record that says your vehicle passed this test). Actually, if the vehicle hasn’t been smog-checked recently, you probably need that too. Mine was just done in 2016 so it wasn’t necessary.
Ooh! Another database tie-in. Okay, we all know a car’s VIN is like the primary key of the DMV’s vehicle database, right? Plate#s you can change, but the VIN is etched in stone steel. But they’re largely sequential – so two 2000 Honda Accords are going to have mostly the same characters in their VINs, up to the last, say, 2-6 numbers (ish.. I’m nowhere near knowledgeable enough about the system, I’m just guessing based on my observation of what happened to me). So when the paperwork comes back from the insurance, it ends up with the wrong VIN, off by 3 #s at the end. But I don’t realize this until I check with the DMV as I’m filing the accident report. Also, you can use online services to look up a VIN and find the basic info about it, but again, because I had such similar VINs (my correct one, and the insurance’s one from the papers), both turned up the same descriptions, down to the body style and trim level (4 door sedan, LX, if you’re curious). The only way we actually found the mistake was that the DMV was looking up “ownership” info based on the VIN, and when the agent read me the name on file, I was like “whodat?”, since it wasn’t me or my father, and then I went back to my pinkslip and checked it there, as well as on the car’s door-panel.
The lesson here is, always double-check your VIN when filing paperwork, especially with the DMV. Moving on.
Before you go further, you need to actually make sure that the insurance and/or the salvage yard has officially notified the DMV of the vehicle being a “total loss”. (See #3 in the list.) In my case, they hadn’t – it had only been a month (between the actual payout and the first time I went to the DMV). So I have to check again before I go back.
But, since I was there, I made the DMV agent answer all my questions and specify exactly what I needed to do to complete this process, and the order in which to do it. Which is why I’m now writing this and sharing with you!
Once that notification is done, the DMV will have record of the vehicle being a “total loss”, or “salvage”. Then you can make a new DMV appointment, go in, and get #5 and #1-2 done all at the same time, in that order. I.e., go to the “inspection” or “inspector” side first, have them do the inspection and fill out the form (REG 31). Then go to the appointment line and take all your paperwork to the agent that calls you. So that’s your “inspection-passed” form (REG 31), your salvage title form (REG 343), your salvage certificate form (REG 488c), and your brake & light certificates. If you have a copy of the insurance co’s REG 481, might as well bring that too! You also need your license plates – you have to “surrender” them, which means turn them in and get new ones (not that same day, obviously – I think they still mail them to the DMV and you have to go pick them up… but I’ll find out soon).
Finally, to add a little icing on this crap-cake. I was driving the Hyundai to work, literally the next day, and I got rear-ended by another driver who wasn’t paying attention at a red-light. Again, super low speed, minor damage, but, another visit to the body shop for that poor black Elantra, and another week with a rental car. (Hyundai Santa Fe this time, which is actually quite nice, and if we need a small/mid SUV in the future, I’d definitely consider it; but due to my commute, we swapped for another Ford Fusion, this time the hybrid model, which again, I enjoyed, but the wife did not. Hey, you win some, you lose some.)
So that’s the story of how we totaled two cars (and damaged one car twice) in less than 4 months.
And that’s the reason I’m now taking a van-pool at least 2 days a week.
I’d always been a fairly safe & cautious driver, but I’ll admit, this long commute had turned me into a bit of a road-rager. Impatient would be the polite term. After all this, I’m back to my old cautious slow & steady ways… for the most part. I still get little flashes of panic when I go by the intersection where the Mazda wreck happened, and I’m always reminding the wife to stay cool and drink her water. She’s never had that happen before, and never felt like it since, so I’m sure it was a one-time fluke, but still.. the DMV wants her to re-test to get her license back, even after her doctors cleared her to drive. That’s a whole other topic, for another time. I will note that none of these incidents were due to cell-phone use, so at least we’re not guilty of that particular vice.
This is an oldie but goody. A) Developers want their apps to manage the record identifiers, but DBAs want the database to do it. B) Developers prefer abstracting the identity values out of sight/mind, DBAs know that occasionally (despite your best efforts to avoid it) your eyeballs will have to look at those values and visually connect them with their foreign key relationships while troubleshooting some obscure bug.
But there’s more to it than that. See, none of those arguments really matter, because there are easy answers to those problems. The real core issue lies with the lazy acceptance of GUI/designer defaults, instead of using a bit of brainpower to make a purposeful decision about your Primary Key and your Clustered Index.
Now wait a minute Mr. DBA, aren’t those the same thing?
NO! That’s where this problem comes from!
A good Clustered Index is: narrow (fewer bytes), unique (or at least, highly selective), static (not subject to updates), and ever-increasing (or decreasing, if you really want). NUSE, as some writers have acronym’d it. A GUID fails criteria ‘N’ and ‘E’. However, that’s not to say a GUID isn’t a fine Primary Key! See, your PK really only needs to be ‘U’; and to a lesser extent, ‘S’. See how those don’t overlap each other? So sure, use those GUIDs, make them your PK. Just don’t let your tool automagically also make that your CX (Clustered indeX). Spend a few minutes making a conscious effort to pick a different column (or couple columns) that meet more of these requirements.
For example, a datetime column that indicates the age of each record. Chances are, you’re using this column in most of your queries on this table anyway, so clustering on it will speed those up.
Most of the time, though, if your data model is reasonably normalized and you’re indexing your foreign keys (because you should!), your PKs & CX’s will be the same. There’s nothing wrong with that. Just be mindful of the trade-offs.
Battle 5: CSV vs TAB
Often, we have to deal with data from outside sources that gets exchanged via “flat files”, i.e. text files that represent a single monolithic table of data. Each line is a row, and within each line, each string between each delimiting character is a column value. So the question is, which is easier to deal with as that delimiter: comma, or tab?
String data values often have commas in them, so usually,the file also needs a “quoting character”, i.e. something that surrounds the string values so that the reader/interpreter of the file knows that anything found inside those quotes is all one value, regardless of any commas found within it.
But tabs are bigger.. aren’t they? No, they’re still just 1 byte (or 2, in Unicode). So that’s a non-argument. Compatibility? Every program that can read and automatically parse a .csv can just as easily do so with a .tab, even if Windows Explorer’s file icon & default-program handler would lead you to believe otherwise.
I recently encountered an issue with BCP (a SQL command-line utility for bulk copying data into / out of SQL server), where the csv was just being a pain in the arse. I tried a tab and all was well! I’m sure it was partially my fault but regardless, it was the path of least resistance.
Battle 6: designers vs scripting
This should be a no-brainer. There is absolutely no excuse for using the table designer or any other wizardy GUIs for database design and maintenance, unless you’re just learning the ropes. And even then, instead of pressing ‘OK’, use the ‘Script’ option to let SSMS generate a `tsql` script to perform whatever actions you just clicked-thru. Now yes, admittedly those generated scripts are rarely a shining example of clean code, but they get the job done, even with some unnecessary filler and fluff. Learn the critical bits and try to write the script yourself next time– and sure, use the GUI-to-script to double check your work, if you still need to.
Confession: I still use the GUI to create new SQL Agent Jobs. It’s not that I don’t know how to script it, it’s just that there are so many non-intuitive parameters to those msdb system-sp’s that I usually have to look them up, thereby spending the time I would have otherwise saved.
Bonus round: the pronunciation of “Data”
Dah-tuh, or Day-tuh? Or, for the 3 people in the world who can actually read those ridiculous pronunciation glyphs, /ˈdeɪtə/ or /ˈdætə/ ? It’s a question as old as the industry itself… or maybe not. Anecdotally, it seems like most data professionals, and people in related industries, tend to say “day-tuh”; while those in the media and generally less technical communities tend to say “dah-tuh”. (Where the first syllable is the same vowel-sound as in “dad” or “cat”.) This likely means that the latter is more popular, but the former is more industrially accepted.
In either case, it doesn’t really matter, because at the end of the day, we’re talking about the same thing. So if some dogmatic DBA or pedantic PHB tries to correct your pronunciation, tell ’em to stop being so persnickety and get on with the task at hand!
On a lighter note than usual, I thought it was time I weighed in on some of the long standing “programmer holy wars”, but with a little DBA-twist (like a twist of lime, only less delicious). Like any good holy war, this will be full of posturing, pontificating, and political correctness. And I probably won’t even commit to a particular side on some issues. But hey, isn’t that the point?
Battle 1: Tabs vs. Spaces
Text editors and IDEs have long been mature enough to handle “smart tabs” and preference-based tab size. However, you will occasionally have to copy-paste code into a non-code-oriented environment, such as an email or a document, where of course the tab size is based on inches rather than spaces in a monospace font. I will admit in those rare instances, tabs are annoying. But what is more annoying is the inconsistency you can get when spaces are used incorrectly, especially in the midst of lines in a sad attempt to do some kind of vertical alignment. Plus, if you happen to have a different spacing-size preference than the original code author, you’re now battling that visual discrepancy as you read & maintain said code.
So I prefer tabs. But I won’t fight my team on it if everybody else prefers spaces — that’s what those settings in the editor/IDE are there for! I will happily conform with the best of them. A quick Google says I’m in the minority anyway — which I’m OK with.
Battle 2: The Case for Casing
But that’s not really what this battle is usually about. Most often, it’s about your names, i.e. the identifiers for objects/methods/variables/procedures/APIs/etc. that your team and your developers have to come up with on a constant basis. And usually it comes down to camelCase, TitleCase (which are often incorrectly used interchangeably! and is apparently better known as PascalCase, which I just learned today, or possibly re-learned after several years), or lower_case_with_underscores (which, in another learning moment, I discovered is named snake_case! How cool is that?). Rarely, if ever, do people argue for ALLCAPS in these areas — it just feels.. obnoxious.
As with any programmer-y topic, you can dive down the rabbit-hole and dissect layer upon layer of nuance in this battle until you’ve lost all semblance of productivity. Because casing is, in some languages, important; while in others it’s simply convention-based, dependent on the abstraction level or family of things you’re talking about. For example, C# Class names are TitleCase, and so typically are Methods, while objectinstances are usually camelCase; public members can be TitleCase or camelCase, and private members can be _underscore_led, or whatever flavors for each that your boiler-plate/template system prefers. Scoped variableNames are most often camel’d as well, while global constants are typically CAPS_WITH_UNDERSCORES. And god help you if you ask a team of more than 3 people what their dependency packages’ names should look like.
So in this battle, I have to play Switzerland. I’m not vehemently opposed to any particular flavor of casing, finding it best to work within the conventions of the language and tool-set at hand.
Side-battle: Spacing in Names
That said, I can’t stand names/identifiers with actual white space in them, but that’s a somewhat different battle. Most languages don’t even allow that, but most RDBMSs will happily accept your ridiculous My Cool Database and its resident Silly Tables and Happy Column 1/2/etc. as long as you properly “quote” them (surround them with [square-brackets] or `backticks`, depending on the SQL flavor). If you submit that kind of nonsense to me, I will find you, and I will slap you with a large trout.
Battle 3: ORM vs Stored-Procs (vs Linq?)
This is that little twist-of-DBA as promised. I recently read an interesting post related to this topic, and essentially the point was this: Developers have “won” (won what? I thought were all on the same side!), the ORM is here to stay, and as DBAs/DBDevs, we (you/I) need to build up our understanding of them so that we A) know them even better than our devs, and B) can troubleshoot performance issues with them.
I think there’s some truth to that, and some necessary context as well. Ideally, yes, I would be an ORM expert on whatever 1 or 2 specific frameworks my colleagues are using (Entity Framework, most likely), and any time there was a potential performance challenge with a app-to-database call, I’d be able to parachute-in and sprinkle some magic dust and make it all better. But I’m also the one DBA (out of approx. 1.3 total), serving 4 teams of 3-6 devs each, so in the immortal words of meme-dom:
Ain’t nobody got time for that!
Now I’m not making excuses. All I’m saying is, the burden of understanding is on more than just one team member or job-role. If your dev team is adapting an ORM, said devs need to learn how it works too — at least enough to help with basic performance troubleshooting. Even if it’s just the ability to extract, from a debug session, the actual T-SQL code that’s being sent to the server, and give me a sample query to analyze for performance bottlenecks.
Let’s step back a bit. It’s all about using the right tool for the job, yes? ORMs are meant for basic CRuD operations and simple data access patterns, right? So why try to build complex business logic into them? Because, like it not, teams do build complex business logic into the data layer — despite our protests and soapbox sermons to not do it. And because the vast majority of applications we’re dealing with are not greenfield. Furthermore, ORMs tend to work best when the data model is well-defined, or the database is modeled well (well-modeled?). And again, we don’t all get to work with unicorns in utopia.
Put it this way: If you want an efficient, performant module of data-layer business-logic against your SQL database, it’s likely going to be a stored procedure carefully crafted by a DBA/DBDev. Could you achieve the same results from the app layer, using Linq and/or some mix of ORM and code? Probably. Do you have the time and patience to do so? Maybe not.
So once again, I’m Switzerland. Well, preferably a more pragmatic version — what country would that be? Norway? Anyway. Use the methodology that’s the best compromise between “right tool for the job”, “optimized developer productivity”, and “easiest to troubleshoot”. It’s a tough call, but that’s why we get paid.