<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>SQL Server Blogs at SQLTeam</title>
    <link>http://weblogs.sqlteam.com/</link>
    <description>SQL Server articles and news</description>
    <pubDate>Sat, 24 Nov 2018 13:47:07 -0500</pubDate>
    <item>
      <title>Running GO as a Windows Service</title>
      <link>https://billg.sqlteam.com/2018/07/16/running-go-as-a-windows-service/</link>
      <description>Checklist for successfully running a GO executable as a Windows service</description>
      <author>Bill Graziano</author>
      <pubDate>Tue, 17 Jul 2018 00:35:47 +0000</pubDate>
    </item>
    <item>
      <title>Send SQL Server Extended Events to Logstash (ELK)</title>
      <link>https://billg.sqlteam.com/2018/06/13/send-sql-server-extended-events-to-logstash-elk/</link>
      <description>xelogstash is a great way to send SQL Server Extended Events to Logstash and Elastic Search and Kibana (ELK)</description>
      <author>Bill Graziano</author>
      <pubDate>Wed, 13 Jun 2018 11:24:13 +0000</pubDate>
    </item>
    <item>
      <title>SQL Server Extended Events in Production</title>
      <link>https://billg.sqlteam.com/2018/05/16/sql-server-extended-events-in-production/</link>
      <description>&lt;p&gt;I have finally jumped on the Extended Events bandwagon.  It was tough to pry Trace and Profiler from my cold, legacy hands!  But I&#39;m mostly there.  I&#39;m still working on a good way to hook up ClearTrace to these things.  It might be as simple as requiring you to pull&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Wed, 16 May 2018 14:02:00 +0000</pubDate>
    </item>
    <item>
      <title>Is It SQL - 1.0.28 now with better AG backups</title>
      <link>https://billg.sqlteam.com/2018/05/15/is-it-sql-1-0-28/</link>
      <description>&lt;p&gt;It&#39;s finally time to push another release of &lt;a href=&#34;https://www.scalesql.com/isitsql/&#34;&gt;Is It SQL&lt;/a&gt; out the door.  This has a few big features I&#39;ve been working on.&lt;/p&gt;&#xA;&#xA;&lt;h2 id=&#34;backups&#34;&gt;Backups&lt;/h2&gt;&#xA;&#xA;&lt;p&gt;First, it handles remote Availability Group backups properly.  In an AG, you can run a backup on a secondary node.  IsItSQL now finds backups on&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Tue, 15 May 2018 17:45:49 +0000</pubDate>
    </item>
    <item>
      <title>Get a Phone Alert When a Query Finishes</title>
      <link>https://billg.sqlteam.com/2017/10/04/generate-phone-alert-when-a-query-finishes/</link>
      <description>&lt;p&gt;Today, through various snafus and situations, I found myself waiting a LONG time for a lock to clear up.  Here&#39;s how I got an alert to pop up on my phone (an iPhone) when that stupid SPID finally rolled back.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;You&#39;ll need to have database mail configured and ready to&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Thu, 05 Oct 2017 02:48:17 +0000</pubDate>
    </item>
    <item>
      <title>PASS Summit Speaker Idol 2017</title>
      <link>http://weblogs.sqlteam.com/robv/archive/2017/09/25/pass-summit-speaker-idol-2017.aspx</link>
      <description>&lt;p&gt;I’m extremely honored to have been chosen once again to participate in Speaker Idol at PASS Summit 2017! I’m in deep trouble too, considering the contestants this year: &lt;a title=&#34;https://www.dcac.co/syndication/your-pass-summit-2017-speaker-idol-contestants-are&#34; href=&#34;https://www.dcac.co/syndication/your-pass-summit-2017-speaker-idol-contestants-are&#34; target=&#34;_blank&#34;&gt;https://www.dcac.co/syndication/your-pass-summit-2017-speaker-idol-contestants-are&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’ve previously blogged about why Speaker Idol is such a great opportunity: &lt;a title=&#34;http://weblogs.sqlteam.com/robv/archive/2015/09/28/pass-speaker-idol-2015.aspx&#34; href=&#34;http://weblogs.sqlteam.com/robv/archive/2015/09/28/pass-speaker-idol-2015.aspx&#34; target=&#34;_blank&#34;&gt;http://weblogs.sqlteam.com/robv/archive/2015/09/28/pass-speaker-idol-2015.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;…and have shared my notes and feedback from the first time I’ve participated: &lt;a title=&#34;http://weblogs.sqlteam.com/robv/archive/2015/10/24/notes-from-speaker-idol-2014.aspx&#34; href=&#34;http://weblogs.sqlteam.com/robv/archive/2015/10/24/notes-from-speaker-idol-2014.aspx&#34; target=&#34;_blank&#34;&gt;http://weblogs.sqlteam.com/robv/archive/2015/10/24/notes-from-speaker-idol-2014.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;…and my good friend Shabnam wrote about her experience in 2016: &lt;a title=&#34;https://shabnamwatson.wordpress.com/2016/11/10/pass-summit-speaker-idol-2016/&#34; href=&#34;https://shabnamwatson.wordpress.com/2016/11/10/pass-summit-speaker-idol-2016/&#34; target=&#34;_blank&#34;&gt;https://shabnamwatson.wordpress.com/2016/11/10/pass-summit-speaker-idol-2016/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;…and for those interested you can see the Speaker Idol 2015 presentations on YouTube:&lt;/p&gt;  &lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;amp;v=Koz-2S3sPso&#34; target=&#34;_blank&#34;&gt;https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;amp;v=Koz-2S3sPso&lt;/a&gt;    &lt;br /&gt;&lt;a href=&#34;https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;amp;v=83sj1ZMp6vs&#34; target=&#34;_blank&#34;&gt;https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;amp;v=83sj1ZMp6vs&lt;/a&gt;    &lt;br /&gt;&lt;a href=&#34;https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;amp;v=SpYTZ2GCVWI&#34; target=&#34;_blank&#34;&gt;https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;amp;v=SpYTZ2GCVWI&lt;/a&gt;    &lt;br /&gt;&lt;a href=&#34;https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;amp;v=q5cDX_eHa-I&#34; target=&#34;_blank&#34;&gt;https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;amp;v=q5cDX_eHa-I&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The 2016 Speaker Idol videos are available on the &lt;a href=&#34;http://www.passboutique.com/summit16-sr.html&#34; target=&#34;_blank&#34;&gt;PASS Summit recordings package for purchase or download from PASS&lt;/a&gt;. If you attended Summit that year you should be able to view them. Also check with your local SQL user group, if they are a PASS Chapter they probably have the videos available.&lt;/p&gt;  &lt;p&gt;Denny Cherry has a video chat for contestants with a lot of great advice: &lt;a title=&#34;https://www.youtube.com/watch?v=8ZRqn9V9JSQ&#34; href=&#34;https://www.youtube.com/watch?v=8ZRqn9V9JSQ&#34; target=&#34;_blank&#34;&gt;https://www.youtube.com/watch?v=8ZRqn9V9JSQ&lt;/a&gt;&lt;/p&gt; &lt;p&gt;...and there&#39;s also this really helpful commentary by some previous judges: &lt;a href=&#34;https://youtu.be/Lz_4BTsI3i4&#34; target=&#34;_blank&#34;&gt;https://youtu.be/Lz_4BTsI3i4&lt;/a&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt; &lt;p&gt;If all of this seems overwhelming, don’t be alarmed! There’s a few key things I’d recommend focusing on that have helped me and others:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;The 5 minute time frame is the killer feature of Speaker Idol. The more attention you pay to meeting this limit the better you’ll do&lt;/strong&gt;&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Aim your rehearsal to hit between 4:30 – 5:00, 4:45 is best. This leaves some buffer time for you to handle unforeseen circumstances or technical difficulties.&lt;/li&gt;      &lt;li&gt;Don’t go below 4:30 when you actually present, you can add a summary or a simple item to fill the remaining time instead.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;As a rehearsal aid, or even as your presentation method, consider the Ignite Talk format:  &lt;a title=&#34;http://www.ignitetalks.io/&#34; href=&#34;http://www.ignitetalks.io/&#34; target=&#34;_blank&#34;&gt;http://www.ignitetalks.io/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Ignite talks are 5 minutes (the length for Speaker Idol presentations) but the slides automatically advance every 15 seconds (20 slides total). It’s a great format to help with timing, and it keeps the presentation flowing. You can always tweak your timing (either duplicate a slide you need more time for, or simply adjust as needed as long as you end at 5 minutes). If nothing else it’s a good starting point if you’re adjusting a longer presentation or starting fresh with new material.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Zoomit!&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you really dig into the advice and videos you’ll think that using ZoomIt or similar tools is clichéd and taken for granted. It’s not. Slide visibility is a consistent complaint at PASS Summit and you DO NOT want to be the lone Speaker Idol contestant with small fonts. I prefer NOT using ZoomIt. I increase the PowerPoint font sizes, and install SSMS 2016 or higher which has built-in zooming and presentation modes. I also avoid using laser pointers, instead using some underlining, color highlights or basic animation to emphasize something on the slides. Shabnam’s blog has some advice on font sizes that you should follow.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Rehearse, Rehearse, Rehearse!&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Like the old saying “How do you get to Carnegie Hall?”, practice makes perfect. If you read my blog notes from 2014, I did much better in my 2nd round because I took a few hours to run through my presentation entirely for timing (and just before the final round too!) If you’re worried that the presentation may become rote or stale from multiple deliveries, I’m confident that it won’t, because you’ll have an audience and you will react differently in their presence. The rehearsal is there to make you comfortable with the material and the timing. It also protects you against technical difficulties, because:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Handling and recovering gracefully from mishaps counts in your favor&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I had microphone difficulties in 2015 but I moved forward through the presentation despite them, and the judges were complimentary about it. The winner for Speaker Idol 2016, Peter Kral, had a serious technical issue crop up in his first round. He modified his presentation in the Final round to avoid the problem, and he won!&lt;/p&gt;  &lt;p&gt;Handling problems is an important skill to have in all facets of life. This is where rehearsal comes in; you should actually rehearse UNTIL you encounter a technical difficulty, so you learn how to deal with it.&lt;/p&gt;  &lt;p&gt;Also, if you can present at a user group or SQL Saturday event that offers Lightning Talks, do so! &lt;a href=&#34;http://www.sqlsaturday.com/686/eventhome.aspx&#34; target=&#34;_blank&#34;&gt;SQL Saturday Oregon&lt;/a&gt; is scheduled the weekend prior to PASS Summit, and they offer a Lightning Talk slot for speakers. This is a great way to shake out any last bugs in front of an audience and to get feedback from them.&lt;/p&gt;  &lt;p&gt;Finally, you should especially take time to rehearse at PASS Summit in the session room where Speaker Idol will be held. If you get to Seattle before Wednesday you should be able to check the room out, and possibly rehearse or at least walk around the stage to get the feel of it. This has been an invaluable help to me and I’ve done it every time I’ve participated. At the very least you should do a technical check of your laptop with the video and audio connections.  This is the last “unknown” factor in your presentation, and the easiest and last way you have to fix it before the big event. As long as security doesn’t throw you out, stay there and practice as long as you can!&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Attend as many Speaker Idol sessions as you can&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Even if it’s not your turn, you’ll get preliminary feedback from the judges and can tweak your presentation beforehand, because you should:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Incorporate all feedback you get from the judges&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I can personally vouch for this as it got me to second place in 2014. You can also see its effect in David Maxwell’s presentation in 2015, which contributed to his ultimately winning that year. Which brings me to:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Wildcard candidates have the same chance as first-round winners!&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The 2015 Speaker Idol winner was a wildcard, and I placed 2nd as a wildcard in 2014. There have also been dropouts each year Speaker Idol has been held (and some last-minute replacements for 2017), so your chances of advancing are much better than would first appear. Don’t accept lack of placement after the first rounds as a failure; you never know what might happen, and even if you don’t advance:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;You spoke at PASS Summit. Congratulations!&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is the most important aspect of Speaker Idol, regardless of who wins. 400-500 people submitted to speak at PASS Summit in 2017, less than 200 were chosen, and probably only 100 if you exclude Microsoft speakers. At least 6 non-finalists have spoken or will be speaking at PASS Summit since presenting at Speaker Idol.&lt;/p&gt;  &lt;p&gt;As I said previously, it’s a no-lose situation. Congratulations and good luck to all Speaker Idol 2017 contestants!&lt;/p&gt;  &lt;p&gt;-Rob&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I’m extremely honored to have been chosen once again to participate in Speaker Idol at PASS Summit 2017! I’m in deep trouble too, considering the contestants this year: <a title="https://www.dcac.co/syndication/your-pass-summit-2017-speaker-idol-contestants-are" href="https://www.dcac.co/syndication/your-pass-summit-2017-speaker-idol-contestants-are" target="_blank">https://www.dcac.co/syndication/your-pass-summit-2017-speaker-idol-contestants-are</a></p>  <p>I’ve previously blogged about why Speaker Idol is such a great opportunity: <a title="http://weblogs.sqlteam.com/robv/archive/2015/09/28/pass-speaker-idol-2015.aspx" href="http://weblogs.sqlteam.com/robv/archive/2015/09/28/pass-speaker-idol-2015.aspx" target="_blank">http://weblogs.sqlteam.com/robv/archive/2015/09/28/pass-speaker-idol-2015.aspx</a></p>  <p>…and have shared my notes and feedback from the first time I’ve participated: <a title="http://weblogs.sqlteam.com/robv/archive/2015/10/24/notes-from-speaker-idol-2014.aspx" href="http://weblogs.sqlteam.com/robv/archive/2015/10/24/notes-from-speaker-idol-2014.aspx" target="_blank">http://weblogs.sqlteam.com/robv/archive/2015/10/24/notes-from-speaker-idol-2014.aspx</a></p>  <p>…and my good friend Shabnam wrote about her experience in 2016: <a title="https://shabnamwatson.wordpress.com/2016/11/10/pass-summit-speaker-idol-2016/" href="https://shabnamwatson.wordpress.com/2016/11/10/pass-summit-speaker-idol-2016/" target="_blank">https://shabnamwatson.wordpress.com/2016/11/10/pass-summit-speaker-idol-2016/</a></p>  <p>…and for those interested you can see the Speaker Idol 2015 presentations on YouTube:</p>  <p><a href="https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;v=Koz-2S3sPso" target="_blank">https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;v=Koz-2S3sPso</a>    <br /><a href="https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;v=83sj1ZMp6vs" target="_blank">https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;v=83sj1ZMp6vs</a>    <br /><a href="https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;v=SpYTZ2GCVWI" target="_blank">https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;v=SpYTZ2GCVWI</a>    <br /><a href="https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;v=q5cDX_eHa-I" target="_blank">https://www.youtube.com/watch?list=PLoGAcXKPcRvbJ5ge4J2DHSleRy4OjSlJw&amp;v=q5cDX_eHa-I</a></p>  <p>The 2016 Speaker Idol videos are available on the <a href="http://www.passboutique.com/summit16-sr.html" target="_blank">PASS Summit recordings package for purchase or download from PASS</a>. If you attended Summit that year you should be able to view them. Also check with your local SQL user group, if they are a PASS Chapter they probably have the videos available.</p>  <p>Denny Cherry has a video chat for contestants with a lot of great advice: <a title="https://www.youtube.com/watch?v=8ZRqn9V9JSQ" href="https://www.youtube.com/watch?v=8ZRqn9V9JSQ" target="_blank">https://www.youtube.com/watch?v=8ZRqn9V9JSQ</a></p> <p>...and there's also this really helpful commentary by some previous judges: <a href="https://youtu.be/Lz_4BTsI3i4" target="_blank">https://youtu.be/Lz_4BTsI3i4</a> </p><p> </p> <p>If all of this seems overwhelming, don’t be alarmed! There’s a few key things I’d recommend focusing on that have helped me and others:</p>  <ul>   <li><strong>The 5 minute time frame is the killer feature of Speaker Idol. The more attention you pay to meeting this limit the better you’ll do</strong></li>    <ul>     <li>Aim your rehearsal to hit between 4:30 – 5:00, 4:45 is best. This leaves some buffer time for you to handle unforeseen circumstances or technical difficulties.</li>      <li>Don’t go below 4:30 when you actually present, you can add a summary or a simple item to fill the remaining time instead.</li>   </ul> </ul>  <p>As a rehearsal aid, or even as your presentation method, consider the Ignite Talk format:  <a title="http://www.ignitetalks.io/" href="http://www.ignitetalks.io/" target="_blank">http://www.ignitetalks.io/</a></p>  <p>Ignite talks are 5 minutes (the length for Speaker Idol presentations) but the slides automatically advance every 15 seconds (20 slides total). It’s a great format to help with timing, and it keeps the presentation flowing. You can always tweak your timing (either duplicate a slide you need more time for, or simply adjust as needed as long as you end at 5 minutes). If nothing else it’s a good starting point if you’re adjusting a longer presentation or starting fresh with new material.</p>  <ul>   <li><strong>Zoomit!</strong></li> </ul>  <p>If you really dig into the advice and videos you’ll think that using ZoomIt or similar tools is clichéd and taken for granted. It’s not. Slide visibility is a consistent complaint at PASS Summit and you DO NOT want to be the lone Speaker Idol contestant with small fonts. I prefer NOT using ZoomIt. I increase the PowerPoint font sizes, and install SSMS 2016 or higher which has built-in zooming and presentation modes. I also avoid using laser pointers, instead using some underlining, color highlights or basic animation to emphasize something on the slides. Shabnam’s blog has some advice on font sizes that you should follow.</p>  <ul>   <li><strong>Rehearse, Rehearse, Rehearse!</strong></li> </ul>  <p>Like the old saying “How do you get to Carnegie Hall?”, practice makes perfect. If you read my blog notes from 2014, I did much better in my 2nd round because I took a few hours to run through my presentation entirely for timing (and just before the final round too!) If you’re worried that the presentation may become rote or stale from multiple deliveries, I’m confident that it won’t, because you’ll have an audience and you will react differently in their presence. The rehearsal is there to make you comfortable with the material and the timing. It also protects you against technical difficulties, because:</p>  <ul>   <li><strong>Handling and recovering gracefully from mishaps counts in your favor</strong></li> </ul>  <p>I had microphone difficulties in 2015 but I moved forward through the presentation despite them, and the judges were complimentary about it. The winner for Speaker Idol 2016, Peter Kral, had a serious technical issue crop up in his first round. He modified his presentation in the Final round to avoid the problem, and he won!</p>  <p>Handling problems is an important skill to have in all facets of life. This is where rehearsal comes in; you should actually rehearse UNTIL you encounter a technical difficulty, so you learn how to deal with it.</p>  <p>Also, if you can present at a user group or SQL Saturday event that offers Lightning Talks, do so! <a href="http://www.sqlsaturday.com/686/eventhome.aspx" target="_blank">SQL Saturday Oregon</a> is scheduled the weekend prior to PASS Summit, and they offer a Lightning Talk slot for speakers. This is a great way to shake out any last bugs in front of an audience and to get feedback from them.</p>  <p>Finally, you should especially take time to rehearse at PASS Summit in the session room where Speaker Idol will be held. If you get to Seattle before Wednesday you should be able to check the room out, and possibly rehearse or at least walk around the stage to get the feel of it. This has been an invaluable help to me and I’ve done it every time I’ve participated. At the very least you should do a technical check of your laptop with the video and audio connections.  This is the last “unknown” factor in your presentation, and the easiest and last way you have to fix it before the big event. As long as security doesn’t throw you out, stay there and practice as long as you can!</p>  <ul>   <li><strong>Attend as many Speaker Idol sessions as you can</strong></li> </ul>  <p>Even if it’s not your turn, you’ll get preliminary feedback from the judges and can tweak your presentation beforehand, because you should:</p>  <ul>   <li><strong>Incorporate all feedback you get from the judges</strong></li> </ul>  <p>I can personally vouch for this as it got me to second place in 2014. You can also see its effect in David Maxwell’s presentation in 2015, which contributed to his ultimately winning that year. Which brings me to:</p>  <ul>   <li><strong>Wildcard candidates have the same chance as first-round winners!</strong></li> </ul>  <p>The 2015 Speaker Idol winner was a wildcard, and I placed 2nd as a wildcard in 2014. There have also been dropouts each year Speaker Idol has been held (and some last-minute replacements for 2017), so your chances of advancing are much better than would first appear. Don’t accept lack of placement after the first rounds as a failure; you never know what might happen, and even if you don’t advance:</p>  <ul>   <li><strong>You spoke at PASS Summit. Congratulations!</strong></li> </ul>  <p>This is the most important aspect of Speaker Idol, regardless of who wins. 400-500 people submitted to speak at PASS Summit in 2017, less than 200 were chosen, and probably only 100 if you exclude Microsoft speakers. At least 6 non-finalists have spoken or will be speaking at PASS Summit since presenting at Speaker Idol.</p>  <p>As I said previously, it’s a no-lose situation. Congratulations and good luck to all Speaker Idol 2017 contestants!</p>  <p>-Rob</p>]]></content:encoded>
      <author>Most Valuable Yak (Rob Volk)</author>
      <pubDate>Mon, 25 Sep 2017 18:43:37 -0400</pubDate>
    </item>
    <item>
      <title>Is It SQL - 1.0.27</title>
      <link>https://billg.sqlteam.com/2017/07/27/is-it-sql-1-0-27/</link>
      <description>&lt;p&gt;I&#39;d like to tell you this release has some great unifying theme.  It doesn&#39;t. It&#39;s just a bunch of things I felt like fixing.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;But let&#39;s start with tags.  That&#39;s what I originally wanted to focus on for this release.  The first change is to separate out the user-tags from&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Thu, 27 Jul 2017 14:00:00 +0000</pubDate>
    </item>
    <item>
      <title>Is It SQL has an Admin GUI</title>
      <link>https://billg.sqlteam.com/2017/05/11/is-it-sql-has-an-admin-gui/</link>
      <description>&lt;p&gt;It&#39;s finally time to push &lt;a href=&#34;http://www.scalesql.com/isitsql/&#34;&gt;Is It SQL 1.0.25&lt;/a&gt; out the door. I sent it to the newsletter subscribers last week and we haven&#39;t discovered any problems yet.&lt;/p&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Before upgrading, please read the README in the zip file! Especially if you have custom connection strings and this is&lt;/strong&gt;&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Thu, 11 May 2017 22:59:37 +0000</pubDate>
    </item>
    <item>
      <title>Is It SQL build 24 shows missing backups</title>
      <link>https://billg.sqlteam.com/2017/04/20/untitled/</link>
      <description>&lt;p&gt;The latest release of &lt;a href=&#34;http://www.scalesql.com/isitsql/&#34;&gt;Is It SQL&lt;/a&gt; now shows missing backups.&lt;/p&gt;&#xA;&#xA;&lt;h1 id=&#34;backups&#34;&gt;Backups  &lt;/h1&gt;&#xA;&#xA;&lt;p&gt;&lt;img src=&#34;https://billg.sqlteam.com/content/images/2017/04/blog-isitsql-24-backups-1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;&#xA;&#xA;&lt;p&gt;The top section gives you a summary of all servers with missing backups and the bottom section lists each individual database that doesn&#39;t have a good backup.  Right now a &#34;good&#34; full backup is defined as being a&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Thu, 20 Apr 2017 11:17:00 +0000</pubDate>
    </item>
    <item>
      <title>Configuring MSDTC Across Domains</title>
      <link>https://billg.sqlteam.com/2016/12/31/configuring-msdtc-across-domains/</link>
      <description>&lt;p&gt;One of my clients has applications that use MSDTC.  We’re spinning up a SQL Server 2016 Availability Group to take advantage of the MSDTC support it introduced.  Most of these distributed transactions take place across linked servers.  And of course the new servers are in a new domain with&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Sat, 31 Dec 2016 15:11:58 +0000</pubDate>
    </item>
    <item>
      <title>Is It SQL now shows Availability Groups</title>
      <link>https://billg.sqlteam.com/2016/12/19/is-it-sql-now-shows-availability-groups/</link>
      <description>&lt;p&gt;The latest release of &lt;a href=&#34;http://www.scalesql.com/isitsql/&#34;&gt;Is It SQL&lt;/a&gt; is out and includes a variety of features.  I’d like to start with some screen shots of previous features.  First up is database mirroring.  You can see the mirroring status of a database when looking at the databases for a particular server.&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Mon, 19 Dec 2016 14:02:42 +0000</pubDate>
    </item>
    <item>
      <title>Database Mirroring in Is It SQL</title>
      <link>https://billg.sqlteam.com/2016/11/10/database-mirroring-in-is-it-sql/</link>
      <description>&lt;p&gt;Release 1.0.22 is out and available at the &lt;a href=&#34;http://www.scalesql.com/isitsql/&#34;&gt;Is It SQL home page&lt;/a&gt;.  The biggest feature here is database mirroring.  &lt;/p&gt;  &lt;p&gt;There are two ways to see database mirroring.  The first is on a server page it will show the databases that are mirrored.  There is also a global&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Thu, 10 Nov 2016 21:40:24 +0000</pubDate>
    </item>
    <item>
      <title>Tagging Servers in Is It SQL</title>
      <link>https://billg.sqlteam.com/2016/09/20/tagging-servers-in-is-it-sql/</link>
      <description>&lt;p&gt;&lt;a href=&#34;https://billg.sqlteam.com/content/images/61500-Tag-page_2.png&#34;&gt;&lt;img title=&#34;Tag-page&#34; style=&#34;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: right; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&#34; border=&#34;0&#34; alt=&#34;Tag-page&#34; src=&#34;https://billg.sqlteam.com/content/images/61500-Tag-page_thumb.png&#34; width=&#34;356&#34; align=&#34;right&#34; height=&#34;302&#34;&gt;&lt;/a&gt;Release 1.0.20 is out.  You can download it from my corporate site at &lt;a title=&#34;http://www.scalesql.com/isitsql/&#34; href=&#34;http://www.scalesql.com/isitsql/&#34;&gt;http://www.scalesql.com/isitsql/&lt;/a&gt;. This release adds a beta feature to allow you tag servers and then filter the list by tag.&lt;/p&gt;  &lt;p&gt;Instructions for enabling beta features are available when you sign up for&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Tue, 20 Sep 2016 13:40:22 +0000</pubDate>
    </item>
    <item>
      <title>IsItSql Shows Databases</title>
      <link>https://billg.sqlteam.com/2016/08/30/isitsql-shows-databases/</link>
      <description>&lt;p&gt;You can download the latest build of &lt;a href=&#34;http://www.scalesql.com/isitsql/&#34;&gt;Is It SQL&lt;/a&gt; from my consulting site.  You can now view the databases on a server.  And you can click on a column header to sort that column.&lt;/p&gt;  &lt;p&gt;&lt;a href=&#34;https://billg.sqlteam.com/content/images/61499-database-page_2.png&#34;&gt;&lt;img title=&#34;database-page&#34; style=&#34;border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px&#34; border=&#34;0&#34; alt=&#34;database-page&#34; src=&#34;https://billg.sqlteam.com/content/images/61499-database-page_thumb.png&#34; width=&#34;704&#34; height=&#34;357&#34;&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And no, my fantasy baseball team in 2015 didn’t do very well.  Unfortunately this&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Tue, 30 Aug 2016 15:58:42 +0000</pubDate>
    </item>
    <item>
      <title>IsItSql - 1.0.18</title>
      <link>https://billg.sqlteam.com/2016/08/04/isitsqlndash1-0-18/</link>
      <description>&lt;p&gt;This release includes a few minor bug fixes and smaller enhancements.  Thanks to everyone that tried it out and reported back.  At the bottom of the README.html I include my email address if you’d like to provide feedback.  I’d love to hear what you like or what&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Thu, 04 Aug 2016 21:44:45 +0000</pubDate>
    </item>
    <item>
      <title>Is It SQL?</title>
      <link>https://billg.sqlteam.com/2016/08/02/is-it-sql/</link>
      <description>&lt;p&gt;I’ve been working on a simple monitoring tool for SQL Server over the last few months.  I often find myself asking “What just happened?” and “Was it SQL Server?”.  I wanted a small utility I could leave running at clients that would answer that question.  It needed to be&lt;/p&gt;</description>
      <author>Bill Graziano</author>
      <pubDate>Tue, 02 Aug 2016 13:22:38 +0000</pubDate>
    </item>
    <item>
      <title>T-SQL Tuesday #72: Data Modeling</title>
      <link>http://weblogs.sqlteam.com/robv/archive/2015/11/10/t-sql-tuesday-72-data-modeling.aspx</link>
      <description>&lt;p&gt;&lt;a style=&#34;float: left&#34; href=&#34;http://mickeystuewe.com/2015/11/03/t-sql-tuesday-72-invitation-data-modeling-gone-wrong/&#34; target=&#34;_blank&#34;&gt;&lt;img src=&#34;http://mickeystuewe.com/wp-content/uploads/2013/08/SqlTuesday.png&#34; /&gt;&lt;/a&gt; It&#39;s that time again: T-SQL Tuesday! This month the lovely and amazing Mickey Stuewe (&lt;a href=&#34;http://mickeystuewe.com/&#34; target=&#34;_blank&#34;&gt;b&lt;/a&gt; | &lt;a href=&#34;https://twitter.com/sqlmickey&#34; target=&#34;_blank&#34;&gt;t&lt;/a&gt;) is hosting and asks us to write about the &lt;a href=&#34;http://mickeystuewe.com/2015/11/03/t-sql-tuesday-72-invitation-data-modeling-gone-wrong/&#34; target=&#34;_blank&#34;&gt;trials and tribulations of data modeling&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Below is a tale that occurs somewhat frequently (in my humble experience anyway), I’ve changed some of the details so as not to embarrass anyone besides myself. Any resemblance to actual data models, living or dead, is really unfortunate.&lt;/p&gt;  &lt;p&gt;(Yes, the excessive code is deliberate)&lt;/p&gt;  &lt;p /&gt;&lt;p /&gt;&lt;p /&gt;&lt;h2&gt;I really love ice cream!&lt;/h2&gt;  &lt;p&gt;I decided to open my own ice cream parlor and design the database I&#39;d need to support it: &lt;/p&gt;  &lt;pre class=&#34;code&#34;&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;IceCream&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;IceCreamID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;IceCreamName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;p&gt;Naturally we need to support some accessories: &lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;pre class=&#34;code&#34;&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;IceCreamToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;IceCreamToppingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;IceCreamToppingName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;&lt;p&gt;And of course we need data:&lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;pre class=&#34;code&#34;&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;IceCream&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;IceCreamName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;vanilla&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;chocolate&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;strawberry&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;Neopolitano&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;pistachio&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;mint chocolate chip&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;IceCreamToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;IceCreamToppingName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;chocolate sprinkles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;candy sprinkles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;chocolate chips&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),&#xD;&#xA;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;blueberry sauce&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;whipped cream&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;butterscotch&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;m&amp;amp;ms&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;oreo crumbles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;h2&gt;Business took off into the stratosphere!&lt;/h2&gt;&#xD;&#xA;&#xD;&#xA;&lt;p&gt;My customers also love putting ice cream on breakfast foods, so I offered pancakes and waffles!&lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;pre class=&#34;code&#34;&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;Pancakes&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;PancakeID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;PancakeName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;PancakeToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;PancakeToppingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;PancakeToppingName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;Waffles&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;WaffleID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;WaffleName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;WaffleToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;WaffleToppingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;WaffleToppingName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;Pancakes&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;PancakeName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;Homemade&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;frozen&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;Waffles&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;WaffleName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;Belgian&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;Eggo round&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;Eggo Square&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;PancakeToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;PancakeToppingName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;chocolate chips&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;blueberries&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;blueberry sauce&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;maple syrup&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;apples&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;cinnamon sugar&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;powdered sugar&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;WaffleToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;WaffleToppingName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;chocolate chips&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;blueberries&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;blueberry sauce&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;maple syrup&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;apples&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;cinnamon sugar&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;powdered sugar&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;h2&gt;WOW!&lt;/h2&gt;&#xD;&#xA;&#xD;&#xA;&lt;p&gt;They loved this so much I started offering other breakfast options:&lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;pre class=&#34;code&#34;&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;Omelettes&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;OmeletteID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;OmeletteName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;OmeletteStuffings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;OmeletteStuffingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;OmeletteStuffingName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;Omelettes&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;OmeletteName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;whole eggs&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;egg whites&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;OmeletteStuffings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;OmeletteStuffingName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;sausage&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;mushrooms&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;green peppers&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;ham&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;spinach&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;feta cheese&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;onion&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;red peppers&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;&lt;h2&gt;And then lunch offerings soon followed:&lt;/h2&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;pre class=&#34;code&#34;&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;Pizza&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;PizzaID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;PizzaName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;PizzaToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;PizzaToppingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;PizzaToppingName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;Burgers&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;BurgerID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;BurgerName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;BurgerToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;BurgerToppingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;BurgerToppingName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;Sandwiches&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;SandwichID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;SandwichName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;SandwichToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;SandwichToppingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;IDENTITY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;SandwichToppingName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;255&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;Pizza&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;PizzaName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;deep dish&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;sicilian&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;regular&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;PizzaToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;PizzaToppingName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;pepperoni&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;sausage&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;mushrooms&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;green peppers&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;ham&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;spinach&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;feta cheese&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;onion&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;pineapple&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;Burgers&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;BurgerName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;beef&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;kobe&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;angus&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;turkey&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;chicken&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;BurgerToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;BurgerToppingName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;bacon&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;mayo&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;mustard&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;lettuce&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;tomato&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;red onion&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;white onion&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;sauteed onion&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;mushrooms&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;sauteed mushrooms&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;pickles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;Sandwiches&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;SandwichName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;roast beef&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;ham&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;turkey&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;pastrami&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;baloney&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;SandwichToppings&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;SandwichToppingName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;bacon&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;mayo&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;mustard&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;lettuce&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;tomato&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;red onion&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;white onion&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;sauteed onion&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;mushrooms&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;sauteed mushrooms&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;&#39;pickles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;h2&gt;And then, my business went international!&lt;/h2&gt;&#xD;&#xA;&#xD;&#xA;&lt;p&gt;People wanted my food, but didn&#39;t speak English, so I offered translations for everything: &lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;pre class=&#34;code&#34;&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;IceCreamToppingsTranslation&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;LanguageID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;IceCreamToppingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;TranslatedText &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;4000&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;WaffleToppingsTranslation&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;LanguageID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;WaffleToppingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;TranslatedText &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;4000&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;PancakeToppingsTranslation&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;LanguageID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;PancakeToppingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;TranslatedText &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;4000&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;PizzaToppingsTranslation&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;LanguageID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;PizzaToppingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;TranslatedText &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;4000&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;BurgerToppingsTranslation&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;LanguageID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;BurgerToppingID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;TranslatedText &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;4000&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- repeat ad nauseum&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;&lt;h2&gt;And then...&lt;/h2&gt;&#xD;&#xA;At some point, I was too busy serving food to design databases anymore, and couldn&#39;t deal with the performance issues that were cropping up, so I hired ace database designer Portia N. Carrera, and she promptly replied: &lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;pre&gt;&#34;This design is ridiculous! And it will only get worse as time goes on! No one in their right mind &#xD;&#xA;would ever do such a thing!&#34; (edited to remove excessive but totally justified profanity) &lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;p&gt;Well, they would. They did. ** &lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#34;Bull----! How did it get like this?&#34; &lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;p&gt;Well, that&#39;s kinda the thing. I started small, and added stuff. It&#39;s easy and natural, and fairly sensible as long as things stay small. Unfortunately as things grew I never went back to look at what&#39;s there and question whether this is the &#34;right&#34; way or if there&#39;s a better way. This became technical debt and the effort needed to change it was insurmountable. &lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#34;Here&#39;s a good take on technical debt:&#34; &lt;a href=&#34;https://medium.com/@MostlyHarmlessD/on-technical-debt-7bac65edf349&#34; target=&#34;_blank&#34;&gt;https://medium.com/@MostlyHarmlessD/on-technical-debt-7bac65edf349&lt;/a&gt; &lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;p&gt;It describes the reasoning/mentality around these decisions, with much of it focused on time constraints. Portia calls this &#34;5 minute/5 second design&#34; and curses everyone&#39;s lack of foresight (when she&#39;s in a bad mood). *** &lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;p&gt;Well Portia, how would you fix it? &lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#34;Like this:&#34; &lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;pre class=&#34;code&#34;&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;FoodTypes&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;FoodTypeID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;FoodType &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;64&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;FoodTypes&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;FoodType&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Ice Cream&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Pancakes&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Waffles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Omelettes&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Pizza&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Burgers&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Sandwiches&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;Foods&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;FoodID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;FoodTypeID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;Food &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;64&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;Foods&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;FoodTypeID&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;Food&lt;span style=&#34;color: gray&#34;&gt;) &#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Vanilla&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Chocolate&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Strawberry&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Ice cream&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;,(&lt;/span&gt;2&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Homemade&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;2&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Frozen&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Pancakes&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;,(&lt;/span&gt;3&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Belgian&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;3&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Eggo Round&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;3&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Eggo Square&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Waffles&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;,(&lt;/span&gt;4&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Whole Eggs&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;4&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Egg Whites&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Omelettes&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;,(&lt;/span&gt;5&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Deep Dish&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;5&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Sicilian&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;5&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Regular&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);  &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Pizza&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;FoodExtras&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;FoodExtraID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;PRIMARY KEY&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;FoodTypeID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;FoodExtraName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;64&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;FoodExtras&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;FoodTypeID&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;FoodExtraName&lt;span style=&#34;color: gray&#34;&gt;) &#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Chocolate sprinkles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Candy sprinkles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Chocolate chips&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Blueberry sauce&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Ice cream toppings&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;,(&lt;/span&gt;2&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Chocolate chips&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;2&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Blueberries&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;2&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Blueberry sauce&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;2&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Maple syrup&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Pancake toppings&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;,(&lt;/span&gt;3&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Chocolate chips&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;3&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Blueberries&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;3&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Blueberry sauce&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;3&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Maple syrup&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Waffle toppings&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;,(&lt;/span&gt;4&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Sausage&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;4&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Mushrooms&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;4&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Green Peppers&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;4&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Ham&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Omelette stuffings&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;,(&lt;/span&gt;5&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Pepperoni&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;5&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Sausage&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;5&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Mushrooms&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;5&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Green Peppers&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;5&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Ham&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;); &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Pizza toppings&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE TABLE &lt;/span&gt;FoodExtraTranslations&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;FoodExtraID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;LanguageID &lt;span style=&#34;color: blue&#34;&gt;int &lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;NOT NULL, &lt;/span&gt;TranslatedText &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;4000&lt;span style=&#34;color: gray&#34;&gt;) NOT NULL);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;INSERT &lt;/span&gt;FoodExtraTranslations&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;FoodExtraID&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;LanguageID&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;TranslatedText&lt;span style=&#34;color: gray&#34;&gt;)&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1031&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;German Chocolate Sprinkles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1036&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;French Chocolate Sprinkles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;)&#xD;&#xA;,(&lt;/span&gt;2&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1031&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;German Candy Sprinkles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;1&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1036&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;French Candy Sprinkles&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;)&#xD;&#xA;,(&lt;/span&gt;13&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1031&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Sausage auf Deutsch&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;),(&lt;/span&gt;13&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;1036&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color: red&#34;&gt;N&#39;Sausage au français&#39;&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&#xD;&#xA;&lt;/span&gt;&lt;/pre&gt;&#xD;&#xA;&#xD;&#xA;&lt;p&gt;She continued:&lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#34;If this looks suspiciously like the dreaded Entity-Attribute-Value model, that&#39;s because it is. &#xD;&#xA;There are definite disadvantages to EAV, but for this particular case it&#39;s a reasonable option to support &#xD;&#xA;this data. The biggest advantage is that no new structure is required; your data becomes row-based rather than &#xD;&#xA;table-based. If you get a new type of food, you just add a row to the FoodTypes table, then the associated rows &#xD;&#xA;for extras and their translations. You&#39;ll probably wonder why Food and FoodExtras are separate, and they really &#xD;&#xA;don&#39;t have to be. I&#39;ll leave that redesign for you to figure out, you&#39;re not paying me enough for that.&#34; &lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;p&gt;But I can&#39;t rewrite all my application code! They&#39;re expecting tables named Waffles, Pancakes, etc. and it&#39;s too much work to change it! &lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#34;Oh give me a ------- break! Just create views with the same name that only SELECT those rows:&#34; &lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;pre class=&#34;code&#34;&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE VIEW &lt;/span&gt;Pancakes&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;PancakeID&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;PancakeName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;AS SELECT &lt;/span&gt;FoodID&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;Food &lt;span style=&#34;color: blue&#34;&gt;FROM &lt;/span&gt;Foods &lt;span style=&#34;color: blue&#34;&gt;WHERE &lt;/span&gt;FoodTypeID&lt;span style=&#34;color: gray&#34;&gt;=&lt;/span&gt;2 &lt;span style=&#34;color: blue&#34;&gt;WITH CHECK OPTION&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;; &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Pancakes&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;GO&#xD;&#xA;CREATE VIEW &lt;/span&gt;Waffles&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;WaffleID&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;WaffleName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;AS SELECT &lt;/span&gt;FoodID&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;Food &lt;span style=&#34;color: blue&#34;&gt;FROM &lt;/span&gt;Foods &lt;span style=&#34;color: blue&#34;&gt;WHERE &lt;/span&gt;FoodTypeID&lt;span style=&#34;color: gray&#34;&gt;=&lt;/span&gt;3 &lt;span style=&#34;color: blue&#34;&gt;WITH CHECK OPTION&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;; &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Waffles&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;GO&#xD;&#xA;CREATE VIEW &lt;/span&gt;Pizza&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;PizzaID&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;PizzaName&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;AS SELECT &lt;/span&gt;FoodID&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;Food &lt;span style=&#34;color: blue&#34;&gt;FROM &lt;/span&gt;Foods &lt;span style=&#34;color: blue&#34;&gt;WHERE &lt;/span&gt;FoodTypeID&lt;span style=&#34;color: gray&#34;&gt;=&lt;/span&gt;5 &lt;span style=&#34;color: blue&#34;&gt;WITH CHECK OPTION&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;; &lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- Pizza&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;GO&#xD;&#xA;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;pre&gt;&#34;And if you&#39;re doing things correctly, you&#39;re calling a stored procedure to do all your INSERT/UPDATE/DELETE operations, &#xD;&#xA;those can be modified easily:&#34; &lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;pre class=&#34;code&#34;&gt;&lt;span style=&#34;color: blue&#34;&gt;CREATE PROCEDURE &lt;/span&gt;AddFood @foodType &lt;span style=&#34;color: blue&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;@foodName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;64&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;AS&#xD;&#xA;INSERT &lt;/span&gt;Foods&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;FoodTypeID&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;Food&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;VALUES&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;@foodType&lt;span style=&#34;color: gray&#34;&gt;,&lt;/span&gt;@foodName&lt;span style=&#34;color: gray&#34;&gt;);&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;GO&#xD;&#xA;&#xD;&#xA;ALTER PROCEDURE &lt;/span&gt;AddPizza @pizzaName &lt;span style=&#34;color: blue&#34;&gt;nvarchar&lt;/span&gt;&lt;span style=&#34;color: gray&#34;&gt;(&lt;/span&gt;64&lt;span style=&#34;color: gray&#34;&gt;) &lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;AS&#xD;&#xA;EXEC &lt;/span&gt;AddFood 5&lt;span style=&#34;color: gray&#34;&gt;, &lt;/span&gt;@pizzaName&lt;span style=&#34;color: gray&#34;&gt;;&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: green&#34;&gt;-- original AddPizza code commented out now...&#xD;&#xA;&lt;/span&gt;&lt;span style=&#34;color: blue&#34;&gt;GO&#xD;&#xA;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;p&gt;Portia continued:&lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;pre&gt;&#34;BTW, you shouldn&#39;t hard-code your IDs either, but I&#39;ll let you fix that. And if you&#39;re doing it with ad-hoc SQL, &#xD;&#xA;or an ORM of some kind, you can still use the views if you add an INSTEAD OF trigger to handle INSERTs and UPDATEs. You&#39;re &#xD;&#xA;not paying me enough to do that either, but it&#39;s easy enough to write a code generator to do all that.&#34; &lt;/pre&gt;&lt;p&gt;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&#xD;&#xA;&lt;/p&gt;&lt;h2&gt;Lessons Learned&lt;/h2&gt;&#xD;&#xA;&#xD;&#xA;&lt;p&gt;If you can’t make or take the time to design them up front, take time every few months to review your table designs. If you see a lot of similar or identical tables, look to consolidate them. See if a row-based approach can be done. Also make sure to test performance, sometimes it may not improve with a new design.&lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;p&gt;But more importantly, TAKE MORE THAN 5 MINUTES to consider your database designs! It&#39;s too easy to &#34;get it done right now&#34; and leave it to someone else to fix later, if ever. Technical debt compounds faster than credit card debt. &lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;p&gt;** This is based on a model I&#39;ve seen in my career, with about 130 &#34;types&#34; of things that all have an associated translation table attached. &lt;/p&gt;&#xD;&#xA;&#xD;&#xA;&lt;p&gt;*** And if you think that technical debt is unavoidable, or not that bad, consider working at Facebook: &lt;a href=&#34;http://www.darkcoding.net/software/facebooks-code-quality-problem/&#34; target=&#34;_blank&#34;&gt;http://www.darkcoding.net/software/facebooks-code-quality-problem/&lt;/a&gt;&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p><a style="float: left" href="http://mickeystuewe.com/2015/11/03/t-sql-tuesday-72-invitation-data-modeling-gone-wrong/" target="_blank"><img src="http://mickeystuewe.com/wp-content/uploads/2013/08/SqlTuesday.png" /></a> It's that time again: T-SQL Tuesday! This month the lovely and amazing Mickey Stuewe (<a href="http://mickeystuewe.com/" target="_blank">b</a> | <a href="https://twitter.com/sqlmickey" target="_blank">t</a>) is hosting and asks us to write about the <a href="http://mickeystuewe.com/2015/11/03/t-sql-tuesday-72-invitation-data-modeling-gone-wrong/" target="_blank">trials and tribulations of data modeling</a>.</p>  <p>Below is a tale that occurs somewhat frequently (in my humble experience anyway), I’ve changed some of the details so as not to embarrass anyone besides myself. Any resemblance to actual data models, living or dead, is really unfortunate.</p>  <p>(Yes, the excessive code is deliberate)</p>  <p /><p /><p /><h2>I really love ice cream!</h2>  <p>I decided to open my own ice cream parlor and design the database I'd need to support it: </p>  <pre class="code"><span style="color: blue">CREATE TABLE </span>IceCream<span style="color: gray">(</span>IceCreamID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>IceCreamName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);
</span></pre><p>

</p><p>Naturally we need to support some accessories: </p>

<pre class="code"><span style="color: blue">CREATE TABLE </span>IceCreamToppings<span style="color: gray">(</span>IceCreamToppingID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>IceCreamToppingName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);

</span></pre>

<p>And of course we need data:</p>

<pre class="code"><span style="color: blue">INSERT </span>IceCream<span style="color: gray">(</span>IceCreamName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'vanilla'</span><span style="color: gray">),(</span><span style="color: red">'chocolate'</span><span style="color: gray">),(</span><span style="color: red">'strawberry'</span><span style="color: gray">),(</span><span style="color: red">'Neopolitano'</span><span style="color: gray">),(</span><span style="color: red">'pistachio'</span><span style="color: gray">),(</span><span style="color: red">'mint chocolate chip'</span><span style="color: gray">);
</span><span style="color: blue">INSERT </span>IceCreamToppings<span style="color: gray">(</span>IceCreamToppingName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'chocolate sprinkles'</span><span style="color: gray">),(</span><span style="color: red">'candy sprinkles'</span><span style="color: gray">),(</span><span style="color: red">'chocolate chips'</span><span style="color: gray">),
(</span><span style="color: red">'blueberry sauce'</span><span style="color: gray">),(</span><span style="color: red">'whipped cream'</span><span style="color: gray">),(</span><span style="color: red">'butterscotch'</span><span style="color: gray">),(</span><span style="color: red">'m&amp;ms'</span><span style="color: gray">),(</span><span style="color: red">'oreo crumbles'</span><span style="color: gray">);
</span></pre><p>

</p><h2>Business took off into the stratosphere!</h2>

<p>My customers also love putting ice cream on breakfast foods, so I offered pancakes and waffles!</p>

<pre class="code"><span style="color: blue">CREATE TABLE </span>Pancakes<span style="color: gray">(</span>PancakeID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>PancakeName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);
</span><span style="color: blue">CREATE TABLE </span>PancakeToppings<span style="color: gray">(</span>PancakeToppingID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>PancakeToppingName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);
</span><span style="color: blue">CREATE TABLE </span>Waffles<span style="color: gray">(</span>WaffleID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>WaffleName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);
</span><span style="color: blue">CREATE TABLE </span>WaffleToppings<span style="color: gray">(</span>WaffleToppingID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>WaffleToppingName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);

</span><span style="color: blue">INSERT </span>Pancakes<span style="color: gray">(</span>PancakeName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'Homemade'</span><span style="color: gray">),(</span><span style="color: red">'frozen'</span><span style="color: gray">);
</span><span style="color: blue">INSERT </span>Waffles<span style="color: gray">(</span>WaffleName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'Belgian'</span><span style="color: gray">),(</span><span style="color: red">'Eggo round'</span><span style="color: gray">),(</span><span style="color: red">'Eggo Square'</span><span style="color: gray">);
</span><span style="color: blue">INSERT </span>PancakeToppings<span style="color: gray">(</span>PancakeToppingName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'chocolate chips'</span><span style="color: gray">),(</span><span style="color: red">'blueberries'</span><span style="color: gray">),(</span><span style="color: red">'blueberry sauce'</span><span style="color: gray">),(</span><span style="color: red">'maple syrup'</span><span style="color: gray">),(</span><span style="color: red">'apples'</span><span style="color: gray">),(</span><span style="color: red">'cinnamon sugar'</span><span style="color: gray">),(</span><span style="color: red">'powdered sugar'</span><span style="color: gray">);
</span><span style="color: blue">INSERT </span>WaffleToppings<span style="color: gray">(</span>WaffleToppingName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'chocolate chips'</span><span style="color: gray">),(</span><span style="color: red">'blueberries'</span><span style="color: gray">),(</span><span style="color: red">'blueberry sauce'</span><span style="color: gray">),(</span><span style="color: red">'maple syrup'</span><span style="color: gray">),(</span><span style="color: red">'apples'</span><span style="color: gray">),(</span><span style="color: red">'cinnamon sugar'</span><span style="color: gray">),(</span><span style="color: red">'powdered sugar'</span><span style="color: gray">);
</span></pre><p>

</p><h2>WOW!</h2>

<p>They loved this so much I started offering other breakfast options:</p>

<pre class="code"><span style="color: blue">CREATE TABLE </span>Omelettes<span style="color: gray">(</span>OmeletteID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>OmeletteName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);
</span><span style="color: blue">CREATE TABLE </span>OmeletteStuffings<span style="color: gray">(</span>OmeletteStuffingID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>OmeletteStuffingName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);

</span><span style="color: blue">INSERT </span>Omelettes<span style="color: gray">(</span>OmeletteName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'whole eggs'</span><span style="color: gray">),(</span><span style="color: red">'egg whites'</span><span style="color: gray">);
</span><span style="color: blue">INSERT </span>OmeletteStuffings<span style="color: gray">(</span>OmeletteStuffingName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'sausage'</span><span style="color: gray">),(</span><span style="color: red">'mushrooms'</span><span style="color: gray">),(</span><span style="color: red">'green peppers'</span><span style="color: gray">),(</span><span style="color: red">'ham'</span><span style="color: gray">),(</span><span style="color: red">'spinach'</span><span style="color: gray">),(</span><span style="color: red">'feta cheese'</span><span style="color: gray">),(</span><span style="color: red">'onion'</span><span style="color: gray">),(</span><span style="color: red">'red peppers'</span><span style="color: gray">);

</span></pre>

<h2>And then lunch offerings soon followed:</h2><p>

</p><pre class="code"><span style="color: blue">CREATE TABLE </span>Pizza<span style="color: gray">(</span>PizzaID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>PizzaName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);
</span><span style="color: blue">CREATE TABLE </span>PizzaToppings<span style="color: gray">(</span>PizzaToppingID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>PizzaToppingName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);

</span><span style="color: blue">CREATE TABLE </span>Burgers<span style="color: gray">(</span>BurgerID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>BurgerName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);
</span><span style="color: blue">CREATE TABLE </span>BurgerToppings<span style="color: gray">(</span>BurgerToppingID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>BurgerToppingName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);

</span><span style="color: blue">CREATE TABLE </span>Sandwiches<span style="color: gray">(</span>SandwichID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>SandwichName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);
</span><span style="color: blue">CREATE TABLE </span>SandwichToppings<span style="color: gray">(</span>SandwichToppingID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">IDENTITY</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1<span style="color: gray">) </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>SandwichToppingName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>255<span style="color: gray">) NOT NULL);

</span><span style="color: blue">INSERT </span>Pizza<span style="color: gray">(</span>PizzaName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'deep dish'</span><span style="color: gray">),(</span><span style="color: red">'sicilian'</span><span style="color: gray">),(</span><span style="color: red">'regular'</span><span style="color: gray">);
</span><span style="color: blue">INSERT </span>PizzaToppings<span style="color: gray">(</span>PizzaToppingName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'pepperoni'</span><span style="color: gray">),(</span><span style="color: red">'sausage'</span><span style="color: gray">),(</span><span style="color: red">'mushrooms'</span><span style="color: gray">),(</span><span style="color: red">'green peppers'</span><span style="color: gray">),(</span><span style="color: red">'ham'</span><span style="color: gray">),(</span><span style="color: red">'spinach'</span><span style="color: gray">),(</span><span style="color: red">'feta cheese'</span><span style="color: gray">),(</span><span style="color: red">'onion'</span><span style="color: gray">),(</span><span style="color: red">'pineapple'</span><span style="color: gray">);
</span><span style="color: blue">INSERT </span>Burgers<span style="color: gray">(</span>BurgerName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'beef'</span><span style="color: gray">),(</span><span style="color: red">'kobe'</span><span style="color: gray">),(</span><span style="color: red">'angus'</span><span style="color: gray">),(</span><span style="color: red">'turkey'</span><span style="color: gray">),(</span><span style="color: red">'chicken'</span><span style="color: gray">);
</span><span style="color: blue">INSERT </span>BurgerToppings<span style="color: gray">(</span>BurgerToppingName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'bacon'</span><span style="color: gray">),(</span><span style="color: red">'mayo'</span><span style="color: gray">),(</span><span style="color: red">'mustard'</span><span style="color: gray">),(</span><span style="color: red">'lettuce'</span><span style="color: gray">),(</span><span style="color: red">'tomato'</span><span style="color: gray">),(</span><span style="color: red">'red onion'</span><span style="color: gray">),(</span><span style="color: red">'white onion'</span><span style="color: gray">),(</span><span style="color: red">'sauteed onion'</span><span style="color: gray">),(</span><span style="color: red">'mushrooms'</span><span style="color: gray">),(</span><span style="color: red">'sauteed mushrooms'</span><span style="color: gray">),(</span><span style="color: red">'pickles'</span><span style="color: gray">);
</span><span style="color: blue">INSERT </span>Sandwiches<span style="color: gray">(</span>SandwichName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'roast beef'</span><span style="color: gray">),(</span><span style="color: red">'ham'</span><span style="color: gray">),(</span><span style="color: red">'turkey'</span><span style="color: gray">),(</span><span style="color: red">'pastrami'</span><span style="color: gray">),(</span><span style="color: red">'baloney'</span><span style="color: gray">);
</span><span style="color: blue">INSERT </span>SandwichToppings<span style="color: gray">(</span>SandwichToppingName<span style="color: gray">) </span><span style="color: blue">VALUES </span><span style="color: gray">(</span><span style="color: red">'bacon'</span><span style="color: gray">),(</span><span style="color: red">'mayo'</span><span style="color: gray">),(</span><span style="color: red">'mustard'</span><span style="color: gray">),(</span><span style="color: red">'lettuce'</span><span style="color: gray">),(</span><span style="color: red">'tomato'</span><span style="color: gray">),(</span><span style="color: red">'red onion'</span><span style="color: gray">),(</span><span style="color: red">'white onion'</span><span style="color: gray">),(</span><span style="color: red">'sauteed onion'</span><span style="color: gray">),(</span><span style="color: red">'mushrooms'</span><span style="color: gray">),(</span><span style="color: red">'sauteed mushrooms'</span><span style="color: gray">),(</span><span style="color: red">'pickles'</span><span style="color: gray">);
</span></pre><p>

</p><h2>And then, my business went international!</h2>

<p>People wanted my food, but didn't speak English, so I offered translations for everything: </p>

<pre class="code"><span style="color: blue">CREATE TABLE </span>IceCreamToppingsTranslation<span style="color: gray">(</span>LanguageID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>IceCreamToppingID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>TranslatedText <span style="color: blue">nvarchar</span><span style="color: gray">(</span>4000<span style="color: gray">) NOT NULL);
</span><span style="color: blue">CREATE TABLE </span>WaffleToppingsTranslation<span style="color: gray">(</span>LanguageID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>WaffleToppingID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>TranslatedText <span style="color: blue">nvarchar</span><span style="color: gray">(</span>4000<span style="color: gray">) NOT NULL);
</span><span style="color: blue">CREATE TABLE </span>PancakeToppingsTranslation<span style="color: gray">(</span>LanguageID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>PancakeToppingID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>TranslatedText <span style="color: blue">nvarchar</span><span style="color: gray">(</span>4000<span style="color: gray">) NOT NULL);
</span><span style="color: blue">CREATE TABLE </span>PizzaToppingsTranslation<span style="color: gray">(</span>LanguageID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>PizzaToppingID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>TranslatedText <span style="color: blue">nvarchar</span><span style="color: gray">(</span>4000<span style="color: gray">) NOT NULL);
</span><span style="color: blue">CREATE TABLE </span>BurgerToppingsTranslation<span style="color: gray">(</span>LanguageID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>BurgerToppingID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>TranslatedText <span style="color: blue">nvarchar</span><span style="color: gray">(</span>4000<span style="color: gray">) NOT NULL);
</span><span style="color: green">-- repeat ad nauseum

</span></pre>

<h2>And then...</h2>
At some point, I was too busy serving food to design databases anymore, and couldn't deal with the performance issues that were cropping up, so I hired ace database designer Portia N. Carrera, and she promptly replied: <p>

</p><pre>"This design is ridiculous! And it will only get worse as time goes on! No one in their right mind 
would ever do such a thing!" (edited to remove excessive but totally justified profanity) </pre><p>

</p><p>Well, they would. They did. ** </p>

<pre>"Bull----! How did it get like this?" </pre><p>

</p><p>Well, that's kinda the thing. I started small, and added stuff. It's easy and natural, and fairly sensible as long as things stay small. Unfortunately as things grew I never went back to look at what's there and question whether this is the "right" way or if there's a better way. This became technical debt and the effort needed to change it was insurmountable. </p>

<pre>"Here's a good take on technical debt:" <a href="https://medium.com/@MostlyHarmlessD/on-technical-debt-7bac65edf349" target="_blank">https://medium.com/@MostlyHarmlessD/on-technical-debt-7bac65edf349</a> </pre><p>

</p><p>It describes the reasoning/mentality around these decisions, with much of it focused on time constraints. Portia calls this "5 minute/5 second design" and curses everyone's lack of foresight (when she's in a bad mood). *** </p>

<p>Well Portia, how would you fix it? </p>

<pre>"Like this:" </pre><p>

</p><pre class="code"><span style="color: blue">CREATE TABLE </span>FoodTypes<span style="color: gray">(</span>FoodTypeID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>FoodType <span style="color: blue">nvarchar</span><span style="color: gray">(</span>64<span style="color: gray">) NOT NULL);
</span><span style="color: blue">INSERT </span>FoodTypes<span style="color: gray">(</span>FoodType<span style="color: gray">) </span><span style="color: blue">VALUES</span><span style="color: gray">(</span><span style="color: red">N'Ice Cream'</span><span style="color: gray">),(</span><span style="color: red">N'Pancakes'</span><span style="color: gray">),(</span><span style="color: red">N'Waffles'</span><span style="color: gray">),(</span><span style="color: red">N'Omelettes'</span><span style="color: gray">),(</span><span style="color: red">N'Pizza'</span><span style="color: gray">),(</span><span style="color: red">N'Burgers'</span><span style="color: gray">),(</span><span style="color: red">N'Sandwiches'</span><span style="color: gray">);

</span><span style="color: blue">CREATE TABLE </span>Foods<span style="color: gray">(</span>FoodID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>FoodTypeID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>Food <span style="color: blue">nvarchar</span><span style="color: gray">(</span>64<span style="color: gray">) NOT NULL);
</span><span style="color: blue">INSERT </span>Foods<span style="color: gray">(</span>FoodTypeID<span style="color: gray">,</span>Food<span style="color: gray">) 
</span><span style="color: blue">VALUES</span><span style="color: gray">(</span>1<span style="color: gray">,</span><span style="color: red">N'Vanilla'</span><span style="color: gray">),(</span>1<span style="color: gray">,</span><span style="color: red">N'Chocolate'</span><span style="color: gray">),(</span>1<span style="color: gray">,</span><span style="color: red">N'Strawberry'</span><span style="color: gray">) </span><span style="color: green">-- Ice cream
</span><span style="color: gray">,(</span>2<span style="color: gray">,</span><span style="color: red">N'Homemade'</span><span style="color: gray">),(</span>2<span style="color: gray">,</span><span style="color: red">N'Frozen'</span><span style="color: gray">) </span><span style="color: green">-- Pancakes
</span><span style="color: gray">,(</span>3<span style="color: gray">,</span><span style="color: red">N'Belgian'</span><span style="color: gray">),(</span>3<span style="color: gray">,</span><span style="color: red">N'Eggo Round'</span><span style="color: gray">),(</span>3<span style="color: gray">,</span><span style="color: red">N'Eggo Square'</span><span style="color: gray">) </span><span style="color: green">-- Waffles
</span><span style="color: gray">,(</span>4<span style="color: gray">,</span><span style="color: red">N'Whole Eggs'</span><span style="color: gray">),(</span>4<span style="color: gray">,</span><span style="color: red">N'Egg Whites'</span><span style="color: gray">) </span><span style="color: green">-- Omelettes
</span><span style="color: gray">,(</span>5<span style="color: gray">,</span><span style="color: red">N'Deep Dish'</span><span style="color: gray">),(</span>5<span style="color: gray">,</span><span style="color: red">N'Sicilian'</span><span style="color: gray">),(</span>5<span style="color: gray">,</span><span style="color: red">N'Regular'</span><span style="color: gray">);  </span><span style="color: green">-- Pizza

</span><span style="color: blue">CREATE TABLE </span>FoodExtras<span style="color: gray">(</span>FoodExtraID <span style="color: blue">int </span><span style="color: gray">NOT NULL </span><span style="color: blue">PRIMARY KEY</span><span style="color: gray">, </span>FoodTypeID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>FoodExtraName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>64<span style="color: gray">) NOT NULL);
</span><span style="color: blue">INSERT </span>FoodExtras<span style="color: gray">(</span>FoodTypeID<span style="color: gray">,</span>FoodExtraName<span style="color: gray">) 
</span><span style="color: blue">VALUES</span><span style="color: gray">(</span>1<span style="color: gray">,</span><span style="color: red">N'Chocolate sprinkles'</span><span style="color: gray">),(</span>1<span style="color: gray">,</span><span style="color: red">N'Candy sprinkles'</span><span style="color: gray">),(</span>1<span style="color: gray">,</span><span style="color: red">N'Chocolate chips'</span><span style="color: gray">),(</span>1<span style="color: gray">,</span><span style="color: red">N'Blueberry sauce'</span><span style="color: gray">) </span><span style="color: green">-- Ice cream toppings
</span><span style="color: gray">,(</span>2<span style="color: gray">,</span><span style="color: red">N'Chocolate chips'</span><span style="color: gray">),(</span>2<span style="color: gray">,</span><span style="color: red">N'Blueberries'</span><span style="color: gray">),(</span>2<span style="color: gray">,</span><span style="color: red">N'Blueberry sauce'</span><span style="color: gray">),(</span>2<span style="color: gray">,</span><span style="color: red">N'Maple syrup'</span><span style="color: gray">) </span><span style="color: green">-- Pancake toppings
</span><span style="color: gray">,(</span>3<span style="color: gray">,</span><span style="color: red">N'Chocolate chips'</span><span style="color: gray">),(</span>3<span style="color: gray">,</span><span style="color: red">N'Blueberries'</span><span style="color: gray">),(</span>3<span style="color: gray">,</span><span style="color: red">N'Blueberry sauce'</span><span style="color: gray">),(</span>3<span style="color: gray">,</span><span style="color: red">N'Maple syrup'</span><span style="color: gray">) </span><span style="color: green">-- Waffle toppings
</span><span style="color: gray">,(</span>4<span style="color: gray">,</span><span style="color: red">N'Sausage'</span><span style="color: gray">),(</span>4<span style="color: gray">,</span><span style="color: red">N'Mushrooms'</span><span style="color: gray">),(</span>4<span style="color: gray">,</span><span style="color: red">N'Green Peppers'</span><span style="color: gray">),(</span>4<span style="color: gray">,</span><span style="color: red">N'Ham'</span><span style="color: gray">) </span><span style="color: green">-- Omelette stuffings
</span><span style="color: gray">,(</span>5<span style="color: gray">,</span><span style="color: red">N'Pepperoni'</span><span style="color: gray">),(</span>5<span style="color: gray">,</span><span style="color: red">N'Sausage'</span><span style="color: gray">),(</span>5<span style="color: gray">,</span><span style="color: red">N'Mushrooms'</span><span style="color: gray">),(</span>5<span style="color: gray">,</span><span style="color: red">N'Green Peppers'</span><span style="color: gray">),(</span>5<span style="color: gray">,</span><span style="color: red">N'Ham'</span><span style="color: gray">); </span><span style="color: green">-- Pizza toppings

</span><span style="color: blue">CREATE TABLE </span>FoodExtraTranslations<span style="color: gray">(</span>FoodExtraID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>LanguageID <span style="color: blue">int </span><span style="color: gray">NOT NULL, </span>TranslatedText <span style="color: blue">nvarchar</span><span style="color: gray">(</span>4000<span style="color: gray">) NOT NULL);
</span><span style="color: blue">INSERT </span>FoodExtraTranslations<span style="color: gray">(</span>FoodExtraID<span style="color: gray">,</span>LanguageID<span style="color: gray">,</span>TranslatedText<span style="color: gray">)
</span><span style="color: blue">VALUES</span><span style="color: gray">(</span>1<span style="color: gray">,</span>1031<span style="color: gray">,</span><span style="color: red">N'German Chocolate Sprinkles'</span><span style="color: gray">),(</span>1<span style="color: gray">,</span>1036<span style="color: gray">,</span><span style="color: red">N'French Chocolate Sprinkles'</span><span style="color: gray">)
,(</span>2<span style="color: gray">,</span>1031<span style="color: gray">,</span><span style="color: red">N'German Candy Sprinkles'</span><span style="color: gray">),(</span>1<span style="color: gray">,</span>1036<span style="color: gray">,</span><span style="color: red">N'French Candy Sprinkles'</span><span style="color: gray">)
,(</span>13<span style="color: gray">,</span>1031<span style="color: gray">,</span><span style="color: red">N'Sausage auf Deutsch'</span><span style="color: gray">),(</span>13<span style="color: gray">,</span>1036<span style="color: gray">,</span><span style="color: red">N'Sausage au français'</span><span style="color: gray">);

</span></pre>

<p>She continued:</p>

<pre>"If this looks suspiciously like the dreaded Entity-Attribute-Value model, that's because it is. 
There are definite disadvantages to EAV, but for this particular case it's a reasonable option to support 
this data. The biggest advantage is that no new structure is required; your data becomes row-based rather than 
table-based. If you get a new type of food, you just add a row to the FoodTypes table, then the associated rows 
for extras and their translations. You'll probably wonder why Food and FoodExtras are separate, and they really 
don't have to be. I'll leave that redesign for you to figure out, you're not paying me enough for that." </pre><p>

</p><p>But I can't rewrite all my application code! They're expecting tables named Waffles, Pancakes, etc. and it's too much work to change it! </p>

<pre>"Oh give me a ------- break! Just create views with the same name that only SELECT those rows:" </pre><p>

</p><pre class="code"><span style="color: blue">CREATE VIEW </span>Pancakes<span style="color: gray">(</span>PancakeID<span style="color: gray">,</span>PancakeName<span style="color: gray">) </span><span style="color: blue">AS SELECT </span>FoodID<span style="color: gray">, </span>Food <span style="color: blue">FROM </span>Foods <span style="color: blue">WHERE </span>FoodTypeID<span style="color: gray">=</span>2 <span style="color: blue">WITH CHECK OPTION</span><span style="color: gray">; </span><span style="color: green">-- Pancakes
</span><span style="color: blue">GO
CREATE VIEW </span>Waffles<span style="color: gray">(</span>WaffleID<span style="color: gray">,</span>WaffleName<span style="color: gray">) </span><span style="color: blue">AS SELECT </span>FoodID<span style="color: gray">, </span>Food <span style="color: blue">FROM </span>Foods <span style="color: blue">WHERE </span>FoodTypeID<span style="color: gray">=</span>3 <span style="color: blue">WITH CHECK OPTION</span><span style="color: gray">; </span><span style="color: green">-- Waffles
</span><span style="color: blue">GO
CREATE VIEW </span>Pizza<span style="color: gray">(</span>PizzaID<span style="color: gray">,</span>PizzaName<span style="color: gray">) </span><span style="color: blue">AS SELECT </span>FoodID<span style="color: gray">, </span>Food <span style="color: blue">FROM </span>Foods <span style="color: blue">WHERE </span>FoodTypeID<span style="color: gray">=</span>5 <span style="color: blue">WITH CHECK OPTION</span><span style="color: gray">; </span><span style="color: green">-- Pizza
</span><span style="color: blue">GO
</span></pre><p>

</p><pre>"And if you're doing things correctly, you're calling a stored procedure to do all your INSERT/UPDATE/DELETE operations, 
those can be modified easily:" </pre><p>

</p><pre class="code"><span style="color: blue">CREATE PROCEDURE </span>AddFood @foodType <span style="color: blue">int</span><span style="color: gray">, </span>@foodName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>64<span style="color: gray">) </span><span style="color: blue">AS
INSERT </span>Foods<span style="color: gray">(</span>FoodTypeID<span style="color: gray">,</span>Food<span style="color: gray">) </span><span style="color: blue">VALUES</span><span style="color: gray">(</span>@foodType<span style="color: gray">,</span>@foodName<span style="color: gray">);
</span><span style="color: blue">GO

ALTER PROCEDURE </span>AddPizza @pizzaName <span style="color: blue">nvarchar</span><span style="color: gray">(</span>64<span style="color: gray">) </span><span style="color: blue">AS
EXEC </span>AddFood 5<span style="color: gray">, </span>@pizzaName<span style="color: gray">;
</span><span style="color: green">-- original AddPizza code commented out now...
</span><span style="color: blue">GO
</span></pre><p>



</p><p>Portia continued:</p>

<pre>"BTW, you shouldn't hard-code your IDs either, but I'll let you fix that. And if you're doing it with ad-hoc SQL, 
or an ORM of some kind, you can still use the views if you add an INSTEAD OF trigger to handle INSERTs and UPDATEs. You're 
not paying me enough to do that either, but it's easy enough to write a code generator to do all that." </pre><p>



</p><h2>Lessons Learned</h2>

<p>If you can’t make or take the time to design them up front, take time every few months to review your table designs. If you see a lot of similar or identical tables, look to consolidate them. See if a row-based approach can be done. Also make sure to test performance, sometimes it may not improve with a new design.</p>

<p>But more importantly, TAKE MORE THAN 5 MINUTES to consider your database designs! It's too easy to "get it done right now" and leave it to someone else to fix later, if ever. Technical debt compounds faster than credit card debt. </p>

<p>** This is based on a model I've seen in my career, with about 130 "types" of things that all have an associated translation table attached. </p>

<p>*** And if you think that technical debt is unavoidable, or not that bad, consider working at Facebook: <a href="http://www.darkcoding.net/software/facebooks-code-quality-problem/" target="_blank">http://www.darkcoding.net/software/facebooks-code-quality-problem/</a></p>]]></content:encoded>
      <author>Most Valuable Yak (Rob Volk)</author>
      <pubDate>Tue, 10 Nov 2015 10:45:08 -0500</pubDate>
    </item>
    <item>
      <title>Notes from Speaker Idol 2014</title>
      <link>http://weblogs.sqlteam.com/robv/archive/2015/10/24/notes-from-speaker-idol-2014.aspx</link>
      <description>When last I blogged, I recommended everyone who was eligible to sign up for PASS Summit Speaker Idol 2015. The contestants have been announced: &lt;a href=&#34;http://www.dcac.co/your-pass-speaker-idol-2015-top-12-are&#34;&gt;http://www.dcac.co/your-pass-speaker-idol-2015-top-12-are&lt;/a&gt;&lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;They also announced the judges in case you want to try the bribery route: &lt;a href=&#34;http://www.dcac.co/your-pass-speaker-idol-2015-judges&#34;&gt;http://www.dcac.co/your-pass-speaker-idol-2015-judges&lt;/a&gt;&lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;To help this year&#39;s participants I will be blogging my notes from when I presented for Speaker Idol 2014, and I&#39;ll also add some specifics about my experience in a separate post. I also recommend that you read up on the previous contest and some follow up from a few of the judges:&lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;&lt;a href=&#34;http://itknowledgeexchange.techtarget.com/sql-server/your-sql-pass-2014-speaker-idol-contestants-are/&#34;&gt;http://itknowledgeexchange.techtarget.com/sql-server/your-sql-pass-2014-speaker-idol-contestants-are/&lt;/a&gt;&lt;br /&gt;&#xD;&#xA;&lt;a href=&#34;http://itknowledgeexchange.techtarget.com/sql-server/pass-speaker-idol-2014-review-and-notes/&#34;&gt;http://itknowledgeexchange.techtarget.com/sql-server/pass-speaker-idol-2014-review-and-notes/&lt;/a&gt;&lt;br /&gt;&#xD;&#xA;&lt;a href=&#34;http://www.dcac.co/pass-summit-2014-speaker-idol-a-judges-perspective&#34;&gt;http://www.dcac.co/pass-summit-2014-speaker-idol-a-judges-perspective&lt;/a&gt;&lt;br /&gt;&#xD;&#xA;&lt;a href=&#34;http://www.datamodel.com/index.php/2014/11/13/pass-summit-2014-speaker-idoljudging-you-part-i/&#34;&gt;http://www.datamodel.com/index.php/2014/11/13/pass-summit-2014-speaker-idoljudging-you-part-i/&lt;/a&gt;&lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;The notes that follow are transcribed from handwritten notes. I&#39;m listing anonymized comments from the judges, primarily because I haven&#39;t gotten their permission, but also to avoid bias on either theirs or the contestant&#39;s side.  In no particular order (red were items to improve, green were items that were well done, my personal comments in parentheses):&lt;br /&gt;&#xD;&#xA;&lt;ul&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Need a story about how (your presentation topic) saved you time or improved your job&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Mentioned great benefits (of presentation topic) without providing evidence or comparison&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Too much information for a 5 minute presentation&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Don&#39;t condense a 1 hour presentation to 5 minutes&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;The faster you need to go, the slower you should talk (don&#39;t rush through explanation)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Voice cut out when turning head away from microphone, turn whole body instead&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Test demos, make sure they don&#39;t fail&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Use scripts only, DO NOT TYPE CODE (typing is not the same as a demo)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;No bullets on slide template (plain formatting)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Too many bullet points on slides&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Avoid using periods at end of bullet points (they aren&#39;t sentences)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Small graphics on slides&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;Good to paste code on slides to avoid needing SSMS, also good font and color for code&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;Great time management with 23 seconds left (should finish between 4:30 and 5:00 minutes)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Not sure what topic was about, need to make clear in beginning; not much meat in first 2 minutes&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;Good to engage audience at beginning of 5 minute presentation (&#34;ballsy&#34; according to 1 judge, but not generally recommended)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;If asking question, be sure to answer/respond, repeat question for audio/audience, and repeat show of hands to audience&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Make sure images on your slides have proper attribution (author/source and license type), also for quotations/citations (several contestants were missing these)&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;Good recovery from technical problems (projector, mouse/remote, audio, demo issues; 3 speakers were commended for this)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Presentation felt like &#34;Books Online&#34;&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Presented on floor rather than podium&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;ZoomIT use mostly poor (only 2 speakers had favorable comments, 3 had negative)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Never really explained/defined the topic, rushed to demo after long intro, could have explained better within time limit&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Font and background color on slides hard to read (it was noted that slides were templates and presenter may not be able to change)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Allow enough time for audience to read slides&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Don&#39;t repeat slides verbatim&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;Good eye contact and gestures (not too big, not too small), good energy and enthusiasm&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Make sure to move with purpose, avoid moving without purpose&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Careful of posture and foot placement, &lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;don&#39;t rock on feet, don&#39;t lean against objects; don&#39;t put hands in pockets&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Presentation agenda was disjointed (should follow logical flow)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Too much code on one slide, hard to read&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Wait for answers to questions &lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;(asked audience question and moved on too quickly)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Laser pointer discipline, do not move it excessively, use as little as possible (more comments from me in future post)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;Engage audience before presentation if possible (say hello, ask questions)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Inconsistent capitalization on slides&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Set up Top 5/Countdown but didn&#39;t emphasize during presentation&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Use SmartArt in Powerpoint for arrows and symbols on slides, rather than raster graphics&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Do not grip lectern, do not hold hands behind back,&lt;/span&gt; &lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;keep hands loose, use gestures,&lt;/span&gt; &lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;don&#39;t stand in one place&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Include quotations in quotation marks (make sure to include attribution)&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Do not wear anything that covers your face or a hat can cast shadows&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;If you do an &#34;About Me&#34; slide, keep it short, include at end and have some contact info (email, Twitter)&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;For a 5 minute presentation, don&#39;t have as much breadth,&lt;/span&gt; go into more depth on fewer items/topics (e.g. mention 3 utilities rather than 7 utilities)&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;Including cost/benefit analysis was good touch&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Do not look at slides on projection screen&lt;/span&gt;, maintain eye contact with audience (know your slide sequence)&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Spell out term before using its acronym (TDE, PLE, etc.)&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Check text visibility especially when using predetermined slide template&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Do not repeat slides verbatim&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Be sure of technical details/facts &lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;(one slide had incorrect information)&lt;/span&gt; and level &lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;(including regedit was too deep for 5 mins)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Command prompt font and background colors (default B&amp;amp;W not visible)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;&lt;/ul&gt;&#xD;&#xA;Final round:&lt;br /&gt;&#xD;&#xA;&lt;ul&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;Improved timing for several contestants&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;Improved body movement &amp;amp; gestures&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Zoomit still needs work for some folks&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(255, 0, 0);&#34;&gt;Still some ums/uhs&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;&lt;span style=&#34;color: rgb(51, 153, 102);&#34;&gt;Improved slides (fewer words, fewer bullets)&lt;/span&gt;&lt;/li&gt;&#xD;&#xA;&lt;/ul&gt;&#xD;&#xA;Here&#39;s feedback I received during my first presentation:&lt;br /&gt;&#xD;&#xA;&lt;ul&gt;&#xD;&#xA;    &lt;li&gt;Ran out of time, had several slides of material I didn&#39;t cover&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Um, uh in speech&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Stood in one spot&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Needs more humor&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Stood in front of PA speaker, caused muddy audio&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Wore microphone on lanyard, picked up fabric/jingly sounds&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Looked back at slides on projection screen too often&lt;/li&gt;&#xD;&#xA;&lt;/ul&gt;&#xD;&#xA;I don&#39;t have notes on my specific feedback during the final round, except that my timing improved dramatically (due to rehearsal). I&#39;ll go into more detail on that in my other post.&lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;I hope this helps all the contestants for 2015, and good luck to you all!</description>
      <content:encoded><![CDATA[When last I blogged, I recommended everyone who was eligible to sign up for PASS Summit Speaker Idol 2015. The contestants have been announced: <a href="http://www.dcac.co/your-pass-speaker-idol-2015-top-12-are">http://www.dcac.co/your-pass-speaker-idol-2015-top-12-are</a><br />
<br />
They also announced the judges in case you want to try the bribery route: <a href="http://www.dcac.co/your-pass-speaker-idol-2015-judges">http://www.dcac.co/your-pass-speaker-idol-2015-judges</a><br />
<br />
To help this year's participants I will be blogging my notes from when I presented for Speaker Idol 2014, and I'll also add some specifics about my experience in a separate post. I also recommend that you read up on the previous contest and some follow up from a few of the judges:<br />
<br />
<a href="http://itknowledgeexchange.techtarget.com/sql-server/your-sql-pass-2014-speaker-idol-contestants-are/">http://itknowledgeexchange.techtarget.com/sql-server/your-sql-pass-2014-speaker-idol-contestants-are/</a><br />
<a href="http://itknowledgeexchange.techtarget.com/sql-server/pass-speaker-idol-2014-review-and-notes/">http://itknowledgeexchange.techtarget.com/sql-server/pass-speaker-idol-2014-review-and-notes/</a><br />
<a href="http://www.dcac.co/pass-summit-2014-speaker-idol-a-judges-perspective">http://www.dcac.co/pass-summit-2014-speaker-idol-a-judges-perspective</a><br />
<a href="http://www.datamodel.com/index.php/2014/11/13/pass-summit-2014-speaker-idoljudging-you-part-i/">http://www.datamodel.com/index.php/2014/11/13/pass-summit-2014-speaker-idoljudging-you-part-i/</a><br />
<br />
The notes that follow are transcribed from handwritten notes. I'm listing anonymized comments from the judges, primarily because I haven't gotten their permission, but also to avoid bias on either theirs or the contestant's side.  In no particular order (red were items to improve, green were items that were well done, my personal comments in parentheses):<br />
<ul>
    <li><span style="color: rgb(255, 0, 0);">Need a story about how (your presentation topic) saved you time or improved your job</span></li>
    <li><span style="color: rgb(255, 0, 0);">Mentioned great benefits (of presentation topic) without providing evidence or comparison</span></li>
    <li><span style="color: rgb(255, 0, 0);">Too much information for a 5 minute presentation</span></li>
    <li><span style="color: rgb(255, 0, 0);">Don't condense a 1 hour presentation to 5 minutes</span></li>
    <li><span style="color: rgb(255, 0, 0);">The faster you need to go, the slower you should talk (don't rush through explanation)</span></li>
    <li><span style="color: rgb(255, 0, 0);">Voice cut out when turning head away from microphone, turn whole body instead</span></li>
    <li>Test demos, make sure they don't fail</li>
    <li><span style="color: rgb(255, 0, 0);">Use scripts only, DO NOT TYPE CODE (typing is not the same as a demo)</span></li>
    <li><span style="color: rgb(51, 153, 102);">No bullets on slide template (plain formatting)</span></li>
    <li><span style="color: rgb(255, 0, 0);">Too many bullet points on slides</span></li>
    <li><span style="color: rgb(255, 0, 0);">Avoid using periods at end of bullet points (they aren't sentences)</span></li>
    <li><span style="color: rgb(255, 0, 0);">Small graphics on slides</span></li>
    <li><span style="color: rgb(51, 153, 102);">Good to paste code on slides to avoid needing SSMS, also good font and color for code</span></li>
    <li><span style="color: rgb(51, 153, 102);">Great time management with 23 seconds left (should finish between 4:30 and 5:00 minutes)</span></li>
    <li><span style="color: rgb(255, 0, 0);">Not sure what topic was about, need to make clear in beginning; not much meat in first 2 minutes</span></li>
    <li><span style="color: rgb(51, 153, 102);">Good to engage audience at beginning of 5 minute presentation ("ballsy" according to 1 judge, but not generally recommended)</span></li>
    <li>If asking question, be sure to answer/respond, repeat question for audio/audience, and repeat show of hands to audience</li>
    <li>Make sure images on your slides have proper attribution (author/source and license type), also for quotations/citations (several contestants were missing these)</li>
    <li><span style="color: rgb(51, 153, 102);">Good recovery from technical problems (projector, mouse/remote, audio, demo issues; 3 speakers were commended for this)</span></li>
    <li><span style="color: rgb(255, 0, 0);">Presentation felt like "Books Online"</span></li>
    <li>Presented on floor rather than podium</li>
    <li><span style="color: rgb(255, 0, 0);">ZoomIT use mostly poor (only 2 speakers had favorable comments, 3 had negative)</span></li>
    <li><span style="color: rgb(255, 0, 0);">Never really explained/defined the topic, rushed to demo after long intro, could have explained better within time limit</span></li>
    <li><span style="color: rgb(255, 0, 0);">Font and background color on slides hard to read (it was noted that slides were templates and presenter may not be able to change)</span></li>
    <li><span style="color: rgb(255, 0, 0);">Allow enough time for audience to read slides</span></li>
    <li><span style="color: rgb(255, 0, 0);">Don't repeat slides verbatim</span></li>
    <li><span style="color: rgb(51, 153, 102);">Good eye contact and gestures (not too big, not too small), good energy and enthusiasm</span></li>
    <li>Make sure to move with purpose, avoid moving without purpose</li>
    <li>Careful of posture and foot placement, <span style="color: rgb(255, 0, 0);">don't rock on feet, don't lean against objects; don't put hands in pockets</span></li>
    <li><span style="color: rgb(255, 0, 0);">Presentation agenda was disjointed (should follow logical flow)</span></li>
    <li><span style="color: rgb(255, 0, 0);">Too much code on one slide, hard to read</span></li>
    <li>Wait for answers to questions <span style="color: rgb(255, 0, 0);">(asked audience question and moved on too quickly)</span></li>
    <li><span style="color: rgb(255, 0, 0);">Laser pointer discipline, do not move it excessively, use as little as possible (more comments from me in future post)</span></li>
    <li><span style="color: rgb(51, 153, 102);">Engage audience before presentation if possible (say hello, ask questions)</span></li>
    <li><span style="color: rgb(255, 0, 0);">Inconsistent capitalization on slides</span></li>
    <li><span style="color: rgb(255, 0, 0);">Set up Top 5/Countdown but didn't emphasize during presentation</span></li>
    <li>Use SmartArt in Powerpoint for arrows and symbols on slides, rather than raster graphics</li>
    <li><span style="color: rgb(255, 0, 0);">Do not grip lectern, do not hold hands behind back,</span> <span style="color: rgb(51, 153, 102);">keep hands loose, use gestures,</span> <span style="color: rgb(255, 0, 0);">don't stand in one place</span></li>
    <li>Include quotations in quotation marks (make sure to include attribution)</li>
    <li><span style="color: rgb(255, 0, 0);">Do not wear anything that covers your face or a hat can cast shadows</span></li>
    <li>If you do an "About Me" slide, keep it short, include at end and have some contact info (email, Twitter)</li>
    <li><span style="color: rgb(255, 0, 0);">For a 5 minute presentation, don't have as much breadth,</span> go into more depth on fewer items/topics (e.g. mention 3 utilities rather than 7 utilities)</li>
    <li><span style="color: rgb(51, 153, 102);">Including cost/benefit analysis was good touch</span></li>
    <li><span style="color: rgb(255, 0, 0);">Do not look at slides on projection screen</span>, maintain eye contact with audience (know your slide sequence)</li>
    <li>Spell out term before using its acronym (TDE, PLE, etc.)</li>
    <li><span style="color: rgb(255, 0, 0);">Check text visibility especially when using predetermined slide template</span></li>
    <li><span style="color: rgb(255, 0, 0);">Do not repeat slides verbatim</span></li>
    <li>Be sure of technical details/facts <span style="color: rgb(255, 0, 0);">(one slide had incorrect information)</span> and level <span style="color: rgb(255, 0, 0);">(including regedit was too deep for 5 mins)</span></li>
    <li><span style="color: rgb(255, 0, 0);">Command prompt font and background colors (default B&amp;W not visible)</span></li>
</ul>
Final round:<br />
<ul>
    <li><span style="color: rgb(51, 153, 102);">Improved timing for several contestants</span></li>
    <li><span style="color: rgb(51, 153, 102);">Improved body movement &amp; gestures</span></li>
    <li><span style="color: rgb(255, 0, 0);">Zoomit still needs work for some folks</span></li>
    <li><span style="color: rgb(255, 0, 0);">Still some ums/uhs</span></li>
    <li><span style="color: rgb(51, 153, 102);">Improved slides (fewer words, fewer bullets)</span></li>
</ul>
Here's feedback I received during my first presentation:<br />
<ul>
    <li>Ran out of time, had several slides of material I didn't cover</li>
    <li>Um, uh in speech</li>
    <li>Stood in one spot</li>
    <li>Needs more humor</li>
    <li>Stood in front of PA speaker, caused muddy audio</li>
    <li>Wore microphone on lanyard, picked up fabric/jingly sounds</li>
    <li>Looked back at slides on projection screen too often</li>
</ul>
I don't have notes on my specific feedback during the final round, except that my timing improved dramatically (due to rehearsal). I'll go into more detail on that in my other post.<br />
<br />
I hope this helps all the contestants for 2015, and good luck to you all!]]></content:encoded>
      <author>Most Valuable Yak (Rob Volk)</author>
      <pubDate>Sat, 24 Oct 2015 19:08:36 -0400</pubDate>
    </item>
    <item>
      <title>PASS Speaker Idol 2015</title>
      <link>http://weblogs.sqlteam.com/robv/archive/2015/09/28/pass-speaker-idol-2015.aspx</link>
      <description>In 2014, PASS offered a new type of session at their Global Summit event: &lt;span style=&#34;font-weight: bold;&#34;&gt;Speaker Idol&lt;/span&gt;.   &lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;Initiated by Denny Cherry (&lt;a href=&#34;http://itknowledgeexchange.techtarget.com/sql-server/&#34;&gt;b&lt;/a&gt; | &lt;a href=&#34;https://twitter.com/mrdenny&#34;&gt;t&lt;/a&gt;), the concept is:  &lt;br /&gt;&#xD;&#xA;&lt;ul&gt;&#xD;&#xA;    &lt;li&gt;To provide an opportunity for community speakers&lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Who haven&#39;t yet presented a regular session at PASS Summit &lt;/li&gt;&#xD;&#xA;    &lt;li&gt;A chance to present to a panel of judges - like American Idol, but without singing. (Sadly. Or not.) &lt;/li&gt;&#xD;&#xA;    &lt;li&gt;For a guaranteed regular session at the next PASS Summit!  &lt;/li&gt;&#xD;&#xA;&lt;/ul&gt;&#xD;&#xA;This is a FANTASTIC idea, and I was fortunate enough to participate that year. And I encourage EVERYONE who is eligible to participate this year and every year they can.  &lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;Why?  &lt;br /&gt;&#xD;&#xA;&lt;ul&gt;&#xD;&#xA;    &lt;li&gt;You get a chance to present at Summit, even if you don&#39;t get to the final round &lt;/li&gt;&#xD;&#xA;    &lt;li&gt;You are getting free feedback from PASS Summit speakers &lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Who know exactly how you feel up on the stage &lt;/li&gt;&#xD;&#xA;    &lt;li&gt;Who WANT to see you deliver a full session next year  &lt;/li&gt;&#xD;&#xA;&lt;/ul&gt;&#xD;&#xA;You can find out more about the 2015 Speaker Idol here:  &lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;&lt;a href=&#34;http://www.dcac.co/pass-summit-2015-speaker-idol-is-back&#34; target=&#34;_blank&#34;&gt;http://www.dcac.co/pass-summit-2015-speaker-idol-is-back&lt;/a&gt; &lt;br /&gt;&#xD;&#xA;&lt;a href=&#34;http://www.dcac.co/want-to-speak-at-the-pass-summit-but-havent-been-selected&#34; target=&#34;_blank&#34;&gt;http://www.dcac.co/want-to-speak-at-the-pass-summit-but-havent-been-selected&lt;/a&gt;&lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;There is absolutely no downside. &lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;Even if you don&#39;t get chosen, I recommend that you attend as many Speaker Idol sessions as you can. The feedback from the judges will help you become a better speaker, and would cost you hundreds of dollars from a professional speaking coach (and may not be as useful since they&#39;re probably not a PASS speaker).  &lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;What are you waiting for?  You can enter using this form:  &lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;&lt;a href=&#34;https://docs.google.com/forms/d/1fjcI98guXfH5ESlmMZ0CygGtGTVqqRFH-12vJZMP0A4/viewform&#34; target=&#34;_blank&#34;&gt;https://docs.google.com/forms/d/1fjcI98guXfH5ESlmMZ0CygGtGTVqqRFH-12vJZMP0A4/viewform&lt;/a&gt;&lt;br /&gt;&#xD;&#xA;&lt;br /&gt;&#xD;&#xA;&lt;span style=&#34;font-weight: bold;&#34;&gt;&lt;font size=&#34;5&#34;&gt;STOP READING THIS BLOG AND ENTER NOW!&lt;/font&gt;&lt;/span&gt;</description>
      <content:encoded><![CDATA[In 2014, PASS offered a new type of session at their Global Summit event: <span style="font-weight: bold;">Speaker Idol</span>.   <br />
<br />
Initiated by Denny Cherry (<a href="http://itknowledgeexchange.techtarget.com/sql-server/">b</a> | <a href="https://twitter.com/mrdenny">t</a>), the concept is:  <br />
<ul>
    <li>To provide an opportunity for community speakers</li>
    <li>Who haven't yet presented a regular session at PASS Summit </li>
    <li>A chance to present to a panel of judges - like American Idol, but without singing. (Sadly. Or not.) </li>
    <li>For a guaranteed regular session at the next PASS Summit!  </li>
</ul>
This is a FANTASTIC idea, and I was fortunate enough to participate that year. And I encourage EVERYONE who is eligible to participate this year and every year they can.  <br />
<br />
Why?  <br />
<ul>
    <li>You get a chance to present at Summit, even if you don't get to the final round </li>
    <li>You are getting free feedback from PASS Summit speakers </li>
    <li>Who know exactly how you feel up on the stage </li>
    <li>Who WANT to see you deliver a full session next year  </li>
</ul>
You can find out more about the 2015 Speaker Idol here:  <br />
<br />
<a href="http://www.dcac.co/pass-summit-2015-speaker-idol-is-back" target="_blank">http://www.dcac.co/pass-summit-2015-speaker-idol-is-back</a> <br />
<a href="http://www.dcac.co/want-to-speak-at-the-pass-summit-but-havent-been-selected" target="_blank">http://www.dcac.co/want-to-speak-at-the-pass-summit-but-havent-been-selected</a><br />
<br />
There is absolutely no downside. <br />
<br />
Even if you don't get chosen, I recommend that you attend as many Speaker Idol sessions as you can. The feedback from the judges will help you become a better speaker, and would cost you hundreds of dollars from a professional speaking coach (and may not be as useful since they're probably not a PASS speaker).  <br />
<br />
What are you waiting for?  You can enter using this form:  <br />
<br />
<a href="https://docs.google.com/forms/d/1fjcI98guXfH5ESlmMZ0CygGtGTVqqRFH-12vJZMP0A4/viewform" target="_blank">https://docs.google.com/forms/d/1fjcI98guXfH5ESlmMZ0CygGtGTVqqRFH-12vJZMP0A4/viewform</a><br />
<br />
<span style="font-weight: bold;"><font size="5">STOP READING THIS BLOG AND ENTER NOW!</font></span>]]></content:encoded>
      <author>Most Valuable Yak (Rob Volk)</author>
      <pubDate>Mon, 28 Sep 2015 14:27:51 -0400</pubDate>
    </item>
    <item>
      <title>SSMS Tools Pack 3.5.0.0 is out with a NEW feature, a few improved features and various bug fixes.</title>
      <link>http://weblogs.sqlteam.com/mladenp/archive/2015/05/03/ssms-tools-pack-3-5-0-0-is-out-with.aspx</link>
      <description>&lt;p&gt;The new feature is called &lt;a href=&#34;http://ssmstoolspack.com/Features?f=15&#34;&gt;&lt;strong&gt;Global Replacement Texts&lt;/strong&gt;&lt;/a&gt;.     &lt;br /&gt;It gives you the ability to add custom replacement texts to your scripts in four different features.     &lt;br /&gt;    &lt;br /&gt;&lt;a href=&#34;http://ssmstoolspack.com/Licensing&#34;&gt;&lt;strong&gt;Licensing&lt;/strong&gt;&lt;/a&gt; now gives you the ability to upgrade your existing license from the previous major version.     &lt;br /&gt;&lt;strong&gt;This upgrade path is around 30% cheaper than buying a completely new license.&lt;/strong&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;a href=&#34;http://ssmstoolspack.com/Features?f=14&#34;&gt;&lt;strong&gt;SQL Editor Plus&lt;/strong&gt;&lt;/a&gt; has been extended with 2 new functionalities:     &lt;br /&gt;- Rename Window Tab by right clicking on your window&#39;s tab.     &lt;br /&gt;- Data Destruction Protector now protects against accidental DROP TABLE.     &lt;br /&gt;    &lt;br /&gt;&lt;a href=&#34;http://ssmstoolspack.com/Features?f=3&#34;&gt;&lt;strong&gt;SQL History&lt;/strong&gt;&lt;/a&gt; has a bug fixed that it didn&#39;t save on every interval when using Save to Database functionality.     &lt;br /&gt;    &lt;br /&gt;&lt;a href=&#34;http://ssmstoolspack.com/Features?f=5&#34;&gt;&lt;strong&gt;Search Database Data&lt;/strong&gt;&lt;/a&gt; now has column type choice like search through all textual or numeric columns, etc.     &lt;br /&gt;    &lt;br /&gt;&lt;a href=&#34;http://ssmstoolspack.com/Features?f=16&#34;&gt;&lt;strong&gt;Other Minor Features&lt;/strong&gt;&lt;/a&gt; have been improved like:     &lt;br /&gt;- Easier distribution of pre-configured add-in settings to new users with Default Settings Deploy.     &lt;br /&gt;- Full compatibility with built-in accessibility color schemes for visually impaired.     &lt;br /&gt;- Increased stability. &lt;/p&gt;  &lt;p&gt;Hope you enjoy it.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>The new feature is called <a href="http://ssmstoolspack.com/Features?f=15"><strong>Global Replacement Texts</strong></a>.     <br />It gives you the ability to add custom replacement texts to your scripts in four different features.     <br />    <br /><a href="http://ssmstoolspack.com/Licensing"><strong>Licensing</strong></a> now gives you the ability to upgrade your existing license from the previous major version.     <br /><strong>This upgrade path is around 30% cheaper than buying a completely new license.</strong>     <br />    <br /><a href="http://ssmstoolspack.com/Features?f=14"><strong>SQL Editor Plus</strong></a> has been extended with 2 new functionalities:     <br />- Rename Window Tab by right clicking on your window's tab.     <br />- Data Destruction Protector now protects against accidental DROP TABLE.     <br />    <br /><a href="http://ssmstoolspack.com/Features?f=3"><strong>SQL History</strong></a> has a bug fixed that it didn't save on every interval when using Save to Database functionality.     <br />    <br /><a href="http://ssmstoolspack.com/Features?f=5"><strong>Search Database Data</strong></a> now has column type choice like search through all textual or numeric columns, etc.     <br />    <br /><a href="http://ssmstoolspack.com/Features?f=16"><strong>Other Minor Features</strong></a> have been improved like:     <br />- Easier distribution of pre-configured add-in settings to new users with Default Settings Deploy.     <br />- Full compatibility with built-in accessibility color schemes for visually impaired.     <br />- Increased stability. </p>  <p>Hope you enjoy it.</p>]]></content:encoded>
      <author>Mladen Prajdić</author>
      <pubDate>Sun, 03 May 2015 21:04:28 -0400</pubDate>
    </item>
  </channel>
</rss>