Thu, 24 July 2014
Welcome back for part 2 of the podcast about databases. In this half, we discuss several of the things we believe that developers should know about databases. From joins to unions, group by's and indexing, we try to touch on a lot of the items that most developers should at least be familiar with when working with database systems.
Database Basics, and Maybe a TOUCH of Advanced Stuff
- CROSS JOIN - cartesian product of two tables - every row in table 1 matched up with every row in table 2
- Careful! Doing this on large tables could crash your server!
- INNER JOIN - where the only rows you get back is when the data in table 1 matches the data in table 2 on the join conditions
- Outer Joins - LEFT OUTER, RIGHT OUTER, FULL OUTER
- LEFT OUTER will return all records from the table on the left side of the join and any data that matches in the right table, otherwise the data in the right table will be nulled
- RIGHT OUTER will return all records from the table on the right side of the join and any data that matches in the left table, otherwise the data in the left table will be nulled
- FULL OUTER will return all data from both tables with the data that's common between the two tables fully filled in, otherwise, the data that's missing from each side will be nulled
- Database Normalization
- Checkout @SqlKris on Twitter - runs a database blog on learning SQL and very helpful in responding to questions on Twitter
- Refactoring databases can be very difficult - usually means refactoring a lot of application code, not to mention any stored procedures, views, etc that may live in the database
- Outlaw is still 21....
- Do you put your data interactions in a stored procedure or do you put that code in an application?
- Pros would be that you've centralized your database "logic"
- Where this doesn't work - if you need data from other systems and using linked servers is not an option
- You can join tables across databases (at least in SQL Server)
- Cardinality - one to one or one to many
- To subtype or not to subtype a table?
- If you decide to do this, you could have hundreds of tables and managing this through your application could be a major pain...but, the performance would be outstanding
- If you don't do subtypes but you do the EAV route (Entity Attribute Value schema), it's easier to maintain but query performance wouldn't be as good as the subtyping
- Set Operators
- UNION - appends two recordsets together (and throws out duplicates)
- UNION ALL - appends two recordsets together and keeps the duplicates
- EXCEPT - returns all the rows in the first recordset unless it's in the second recordset
- INTERSECT - returns all the rows that are common between the first recordset and the second recordset (similar to doing an INNER JOIN on every column being returned from the two tables being used)
- Check out SQL Authority
- Aggregating Data
- Difference between a HAVING and a WHERE clause? - Interview question asked in every developer interview known to man! :-)
- GROUP BY - used to "group" or aggregate data based off the provided columns
- Have to use a GROUP BY when doing an AVG (average) or a SUM or a MAX, MIN, etc.
- Why no GROUP BY *????
- DISTINCT or GROUP BY - can do similar things if you're trying to remove duplicate values
- Row numbers - think paging - you want to get records between 100 and 120
- Oracle - rownum
- SQL Server 2005 and up - ROW_NUMBER()
- mySQL - start drinking heavily
- Windowed Functions in SQL Server - GLORIOUS
- Is char...."char" as in you burnt our burgers, or is it "car" as in you drive it - PLEASE, leave your comment below!!!
- nvarchar vs varchar - if you will EVER need to store UNICODE (international characters, etc.), then go nvarchar...if not, save the space and use varchar
- To Guid or not to Guid?! Why they suck as a primary key on your table (for performance)
- Parameterized queries - USE THEM!
OWASP in Episode 4
- What about SQL Developers who want to program?
- Perl (similar to what database guys do with scrubbing data)
Performance in Databases
- Clustered Indexes - stores the data sorted in the table (makes your table a clustered table)
- Non-clustered indexes - stored outside the table but points back to the records in the main table storage
- Can index temp tables! Sometimes necessary
- SQL Server 2008 (and up) - Filtered Indexes
- Creating a ton of indexes is not always the right solution!
- Understanding fill factors - leaving space for wiggle room on an index
- CAN be a performance bottleneck on inserts / updates
Resources We Like
Tips of the Week
Direct download: Databases-Part-2.mp3
-- posted at: 11:49pm EDT
Sun, 13 July 2014
Part one of our two part database podcast starts with choosing the RDBMS (Relational Database Management System) and what to do when you run into deficiencies in that particular database system.
First and foremost, what's with the title?! Are these guys grammatically challenged? If that was your first thought, then you should check out this link:
Others who have been around a little while (longer than us three 21 year olds), we hope you got a kick out of the title.
- How much should a developer know about databases in general?
- How do you pick a database when you're starting a project?
- Microsoft SQL Server
- No SQL databases
- Do you hack solutions to deal with the deficiencies of the particular database system you chose?
Tips of the Week
Sun, 22 June 2014
Direct download: coding-blocks-episode-12.mp3
-- posted at: 7:39pm EDT
Sat, 7 June 2014
This week we're tackling the first section of seminal Design Patterns book: Creational Patterns.
We discuss factories of factories, "bullet hell" games, pathological liars, and Allen's lack of voice.
Big thanks to @rajsotweet for calling us out and getting us motivated to record!
Direct download: coding-blocks-episode-11.mp3
-- posted at: 7:00am EDT
Sun, 4 May 2014
This week we're taking pot shots from the peanut gallery!
We talk about new features in C# 6. What we like, what we love...and binary literals.
We also struggle to define Roslyn and BONUS! poetry reading from Michael Outlaw!
Direct download: coding-blocks-episode-10.mp3
-- posted at: 8:25pm EDT
Sun, 6 April 2014
You down with AOP? This week we're talking with Vlad Hrybok about his spectacular Aspect Oriented Programming Framework: Aspectacular.
Highlights include lots of Design Patterns, Acronyms, Buzzwords and...Duff Beer?
Direct download: coding-blocks-episode-9.mp3
-- posted at: 12:00am EDT
Mon, 17 March 2014
Q: What do developers love more than developing?
A: Expensive accessories!!!
This week we're talking about our Christmas in July lists. Dream keyboards, mouses, office furniture and tablets...oh my!
Direct download: coding-blocks-episode-8.mp3
-- posted at: 8:30pm EDT
Sun, 2 March 2014
We discuss the 5 SOLID principles of writing maintainable code, with a focus on C# and .NET, Single Responsibility Principle, Open-Closed Principle, Liskov Substitution Principle, Interface Segregation Principle and Dependency Inversion.
Direct download: coding-blocks-episode-7.mp3
-- posted at: 10:05pm EDT
Sat, 25 January 2014
This week we’re talking about LINQ, what’s so special about .NET, the differences IQueryable and IEnumerable, and another round of “Never Have I Ever”. Oh, and jokes!
Direct download: coding-blocks-episode-006.mp3
-- posted at: 12:32am EDT
Fri, 27 December 2013
This week we're trying to wrap our heads around open source software licensing. We discuss the main types of licenses (and a few of our favorites!), what it means to violate a license, and take a fun look at a few weird questions.
Download the episode on iTunes or Stitcher and make sure to send us your feedback.
Direct download: coding-blocks-episode-005.mp3
-- posted at: 10:27pm EDT