Live data from Hacker News

SQL Design Patterns (2010)

vadimtropashko.wordpress.com

31–35 of 35 posts

Re: SQL Design Patterns (2010)

#32
post #25

Earlier quoted context omitted.

Frankly, this is terrible advice. If you’re not designing your data model around the language it’s going to be queried in, how do you expect to get decent performance out of the database? Also, in no way does SQL hide anything - it’s a declarative language, and will produce exactly what you tell it to, provided you understand what it is you asked it to do. The query engine is somewhat of a black box, but that is comp…

> Also, in no way does SQL hide anything - it’s a declarative language, and will produce exactly what you tell it to. Ha ha, no, SQL implementations can conform to the standard in unexpected ways. NULL = NULL Is that true or false? We didn't know until 2003. https://en.wikipedia.org/wiki/Null_(SQL)#Criticisms

Considering that all implementations I’m aware of have evaluated that expression to NULL, this isn’t a very pragmatic example. NULL is unknown, and every type has it as a possibility.

The SQL2003 changes were more about how constraints should treat NULL than anything intrinsic about NULL itself.

Re: SQL Design Patterns (2010)

#33
post #21

Earlier quoted context omitted.

Parent made it sound - to me - that you put an input in and hope for the best. If you understand the operators, you can quite confidently predict an output given an input.

> If you understand the operators That’s the point. In an imperative language if you don’t yet understand (or make a typo, or whatever), you can just print/console.log and find out. I’ve seen junior devs, data analysts, and LLMs spin their wheels trying to figure out why adding a join isn’t producing the output they want. I don’t think they would figure it out using SQL alone if you gave them a month.

Then you back off, and go back to first principles. Create the minimum example of the problem, and as a sibling comment mentioned, break it down to its constituent parts and observe what happens in each.

Re: SQL Design Patterns (2010)

#34

Earlier quoted context omitted.

SQL is a declarative language so it —- by definition —- hides the execution. Not really sure what you’re trying to argue here.

You missed the "performance" part. Depending on how you write your query and how you structure your data, a query can take 0.005 seconds or 500 seconds. SQL hiding the execution is an extremely leaky abstraction. To get the performance you need, you have to plan your possible queries in advance together with how to structure the data. I mean, it doesn't matter if you only have 100 rows per table, but once you're deal…

If you use bubblesort instead of quicksort it will take longer as well. Knowing the language and understanding the schema solves this.

Re: SQL Design Patterns (2010)

#35

Earlier quoted context omitted.

SELECT DISTINCT is often a code smell. (Not always.) If you see it, there’s a 70% chance it got slapped on to fix an issue that should have been solved a different way. SELECT DISTINCT ON is different, and useful.

I had a teacher who had specific rules for exams when we wrote SQL statements: - For a question worth 2 points, if you use the word "DISTINCT" when it wasn't needed, you lose 0.5 points. - If you don't use "DISTINCT" when it was necessary, you lose all 2 points.

Oh yes, introducing a little game theory anxiety into exam questions sounds like a wonderful little torturing tool!
Post reply on HN