<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Architecture and Data Blog</title>
    <link>https://sadalage.com/post/</link>
    <description>Recent content in Posts on Architecture and Data Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <copyright>© 2026 Pramod Sadalage</copyright>
    <lastBuildDate>Thu, 24 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://sadalage.com/post/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Collaborate to improve data quality</title>
      <link>https://sadalage.com/post/collaborate_to_improve_data_quality/</link>
      <pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/collaborate_to_improve_data_quality/</guid>
      <description>&lt;p&gt;When application has been running in production or uat for some time there are some bugs that get reported because of bad data quality. This data is either generated by the application or is created by data migration scripts, data conversion scripts. The application suffers with non-deterministic errors especially is some specific environments while similar errors are not noticed in other environments.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Automated testing of custom sql</title>
      <link>https://sadalage.com/post/automated_custom_sql_testing/</link>
      <pubDate>Tue, 23 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/automated_custom_sql_testing/</guid>
      <description>&lt;p&gt;Lots of time hand coded SQL is written in the applications for performance sake, getting data using complex SQL out of the tables. As the database structure changes it becomes really hard to find out all the SQL that needs to be changed. In other cases SQL is generated based on certain conditions in the code and its hard to find if the generated SQL is valid after database changes are done.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Generate boiler plate code</title>
      <link>https://sadalage.com/post/generate_boiler_plate_code/</link>
      <pubDate>Sat, 17 May 2025 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/generate_boiler_plate_code/</guid>
      <description>&lt;p&gt;When accessing the database using stored procedures for basic Create, Read, Update and Delete (CRUD) functions, or when you want to write triggers that capture the before and after values in tables, or when you want to create Plain Old Java Objects (POJO&amp;rsquo;s) that match the database objects, writing these by hand takes a lot of effort and also since the requirements are changing in an agile projects at a frequent rate, there will be design changes to meet the requirement changes, so the triggers, CRUD stored procedures or Data Access Objects (DAO) are going to be out of data, instead of hand coding, its better to generate the code, using the metadata of the database&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Data specialists should pair with developers</title>
      <link>https://sadalage.com/post/pair-with-developers/</link>
      <pubDate>Thu, 01 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/pair-with-developers/</guid>
      <description>&lt;p&gt;Traditionally the data-team is used to sitting in their own area and working for many project teams by handling requests either via a ticketing system or vi email. The hand-over of work or throwing of work over the wall creates knowledge silos and inefficiencies.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Publish data models in CI Pipeline</title>
      <link>https://sadalage.com/post/publish-data-models/</link>
      <pubDate>Sat, 16 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/publish-data-models/</guid>
      <description>&lt;p&gt;Many a times ER models are created by the data team and are not shared outside of the data team generally for the lack of tools licenses, since its not feasible for the entire team to purchase licenses for the ER modelling tools such as &lt;a href=&#34;https://www.erwin.com/products/erwin-data-modeler&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Erwin Data Modeller&lt;/a&gt; or &lt;a href=&#34;https://www.idera.com/products/er-studio/data-architect&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Er Studio&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Trusting search results from Google &amp; Others</title>
      <link>https://sadalage.com/post/trusted-search-results/</link>
      <pubDate>Fri, 04 Dec 2020 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/trusted-search-results/</guid>
      <description>&lt;p&gt;Search engines have been great to find information on the internet with their ease of use and the ability to find cross linked content with specific keywords.&#xA;This ease of use is being exploited by scammers and imposters.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SSL Connection to AWS Aurora</title>
      <link>https://sadalage.com/post/ssl-aws-aurora/</link>
      <pubDate>Mon, 15 Jul 2019 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/ssl-aws-aurora/</guid>
      <description>&lt;p&gt;On a recent project we had to connect to AWS Aurora postgres 10.6 version of the database in SSL mode using JDBC and Java 11 JRE. When the Aurora cluster is setup, we can force all connections to use SSL by using the options group settings (&lt;code&gt;forceSSL=true&lt;/code&gt;), establishing secure connection from the application to the database is not as easy as it looks.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Static Analysis of PL/SQL code</title>
      <link>https://sadalage.com/post/static-analysis-of-plsql-code/</link>
      <pubDate>Tue, 01 Aug 2017 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/static-analysis-of-plsql-code/</guid>
      <description>&lt;p&gt;In all new development and sometimes during legacy codebase modernization, developers tend to add code quality checks and static analysis of codebase such as style checks, bug finders, cyclomatic complexity checking etc. into the CI/CD pipeline. When we inherit a codebase that has much PL/SQL and there is a desire to put the PL/SQL code base through the same types of code analysis, what options does a developer/dba have?&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>ID generation with ORM&#39;s Table, Sequence or Identity strategy</title>
      <link>https://sadalage.com/post/id-generation/</link>
      <pubDate>Mon, 12 Jun 2017 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/id-generation/</guid>
      <description>&lt;p&gt;In this blog post, I will discuss ID generation techniques using the Object Relation Mapping frameworks such as Hibernate, Toplink, ActiveRecord, Entity Framework. When using hibernate or any other ORM mapping framework. There is a need to generate primary key values for the &amp;ldquo;id&amp;rdquo; columns. These values can be generated by using IDENTITY, SEQUENCE or TABLE strategies.&#xA;Generating custom values for primary keys or other values is a topic for another blog post.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using liquibase to load data and ignore some columns</title>
      <link>https://sadalage.com/post/using-liquibase-to-load-data-and-ignore-some-columns/</link>
      <pubDate>Mon, 15 May 2017 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/using-liquibase-to-load-data-and-ignore-some-columns/</guid>
      <description>&lt;p&gt;Loading data into tables is needed many times on projects to load test, &lt;a href=&#34;http://www.liquibase.org/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Liquibase&lt;/a&gt; provides a method to load data into tables with lots of customization.&#xA;In the example shown below, I&amp;rsquo;m loading &lt;a href=&#34;http://federalgovernmentzipcodes.us/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;zip code data&lt;/a&gt; with the following column layout&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;#34;Zipcode&amp;#34;,&amp;#34;ZipCodeType&amp;#34;,&amp;#34;City&amp;#34;,&amp;#34;State&amp;#34;,&amp;#34;LocationType&amp;#34;,&amp;#34;Lat&amp;#34;,&amp;#34;Long&amp;#34;,&amp;#34;Location&amp;#34;,&amp;#34;Decommisioned&amp;#34;,&amp;#34;TaxReturnsFiled&amp;#34;,&amp;#34;EstimatedPopulation&amp;#34;,&amp;#34;TotalWages&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description>
      
    </item>
    
    <item>
      <title>Two factor authentication to authorize credit&#34;</title>
      <link>https://sadalage.com/post/two-factor-authentication-to-authorize-credit/</link>
      <pubDate>Wed, 13 Jul 2016 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/two-factor-authentication-to-authorize-credit/</guid>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;Simple flow of credit file usage by Individual Citizens&#34;&#xA;    src=&#34;https://sadalage.com/img/present-flow.jpg&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Automatically adding columns to Rails migrations</title>
      <link>https://sadalage.com/post/automatically-adding-columns-to-rails-migrations/</link>
      <pubDate>Mon, 25 Apr 2016 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/automatically-adding-columns-to-rails-migrations/</guid>
      <description>&lt;p&gt;Many projects need addition of identical columns to all the tables created by the project. Audit columns are an example of such a requirement. The requirement is to add columns such as &lt;em&gt;created_by&lt;/em&gt;, &lt;em&gt;created_date&lt;/em&gt;, &lt;em&gt;modified_by&lt;/em&gt; and &lt;em&gt;modified_date&lt;/em&gt; to all the tables, these columns store, who created the row, when the row was created,  who modified the row last and when was it modified. &lt;em&gt;created_by&lt;/em&gt; and &lt;em&gt;created_date&lt;/em&gt; are required to be present when the row is inserted and thus are required to be &lt;em&gt;not nullable&lt;/em&gt;. Adding these columns to each and every table is a lot of work for developers.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Synonyms as abstraction layer</title>
      <link>https://sadalage.com/post/synonyms-as-abstraction-layer/</link>
      <pubDate>Fri, 15 Apr 2016 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/synonyms-as-abstraction-layer/</guid>
      <description>&lt;p&gt;In many development shops, developers are not allowed to access the database schema directly, and are not allowed to create tables, indexes, views etc, instead are given access via a different schema that allows &lt;em&gt;SELECT&lt;/em&gt;, &lt;em&gt;UPDATE&lt;/em&gt; and &lt;em&gt;DELETE&lt;/em&gt; access on data. The general reason is to avoid developers creating database objects without&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Behavior Driven Database Development</title>
      <link>https://sadalage.com/post/behavior-driven-database-development/</link>
      <pubDate>Sun, 16 Aug 2015 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/behavior-driven-database-development/</guid>
      <description>&lt;p&gt;When Behavior Driven Development &lt;a href=&#34;http://dannorth.net/introducing-bdd&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;BDD&lt;/a&gt; was introduced, some of the key principles were&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Requirements are behavior,&lt;/li&gt;&#xA;&lt;li&gt;Provides &amp;ldquo;ubiquitous language&amp;rdquo; for analysis,&lt;/li&gt;&#xA;&lt;li&gt;Acceptance criteria should be executable.&lt;/li&gt;&#xA;&lt;li&gt;Design constraints should be made into executable tests.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
      
    </item>
    
    <item>
      <title>Using rake and activerecord to generate boilerplate DB Code</title>
      <link>https://sadalage.com/post/using-rake-and-activerecord-to-generate-boilerplate-db-code/</link>
      <pubDate>Mon, 20 Jul 2015 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/using-rake-and-activerecord-to-generate-boilerplate-db-code/</guid>
      <description>&lt;p&gt;IN many projects, there are tables which need default audit columns such as &lt;em&gt;Created_By&lt;/em&gt;, &lt;em&gt;Created_Date&lt;/em&gt;, &lt;em&gt;Modified_By&lt;/em&gt;, &lt;em&gt;Modified_date&lt;/em&gt; and other columns that need to be updated every time some actions are done against the tables and/or columns. This type of functionality can be implemented using triggers.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Database naming conventions in different environments</title>
      <link>https://sadalage.com/post/database-naming-conventions-in-different-environments/</link>
      <pubDate>Wed, 10 Jun 2015 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/database-naming-conventions-in-different-environments/</guid>
      <description>&lt;p&gt;In every enterprise and every project we end up having multiple environments, especially the database side of the enterprise tends to stick around for a longer period of time and has much more dependencies or application integration as opposed to application urls etc.&#xA;Given this, how to name the servers, databases and schemas becomes a very important decision, do these names provide for an easy way to use the application and not make it harder or the developers to access the database.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>8 Techniques for testing migration of data from legacy systems</title>
      <link>https://sadalage.com/post/testing-migration-of-data-from-legacy-systems/</link>
      <pubDate>Fri, 23 Jan 2015 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/testing-migration-of-data-from-legacy-systems/</guid>
      <description>&lt;p&gt;Many of the projects we end up working on are replacing existing systems with existing data either wholly or in part. In all of the above projects we end up writing data migration or data conversion code to move the data from legacy systems to the new systems. Many stake holders of the project such as business users, project managers, business analysts really care about the data conversion scripts and the quality of the conversion. Since this conversion is business entity related and matters a lot as future business/functionality depends on the data being logically equivalent to the legacy system.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Migrations in NoSQL databases</title>
      <link>https://sadalage.com/post/migrations-in-nosql-databases/</link>
      <pubDate>Tue, 14 Oct 2014 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/migrations-in-nosql-databases/</guid>
      <description>&lt;p&gt;In relational database usage the pattern of migrations is well understood and has gained widespread acceptance. Frameworks such as &lt;a href=&#34;http://dbdeploy.com/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;DBDeploy&lt;/a&gt;, &lt;a href=&#34;http://www.dbmaintain.org/overview.html&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;DBMaintain&lt;/a&gt;, &lt;a href=&#34;http://blog.mybatis.org/p/products.html&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;MyBatis migrations&lt;/a&gt;, &lt;a href=&#34;http://flywaydb.org/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Flyway&lt;/a&gt;, &lt;a href=&#34;http://www.liquibase.org/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Liquibase&lt;/a&gt;, &lt;a href=&#34;http://guides.rubyonrails.org/migrations.html&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Active Record Migrations&lt;/a&gt; and many others. These tools allow to migrate the database and maintain the version history of the database in the database.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>10 node mongodb ReplicaSet on a Single Machine&#34;</title>
      <link>https://sadalage.com/post/node-mongodb-replicaset-on-a-single-machine/</link>
      <pubDate>Mon, 09 Jun 2014 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/node-mongodb-replicaset-on-a-single-machine/</guid>
      <description>&lt;p&gt;While doing evalauation of NoSQL databases, we had a&#xA;&lt;a href=&#34;http://sadalage.com/blog/2013/04/25/10_node_riak_cluster/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;10 node riak cluster&lt;/a&gt; and wanted check how a similar setup would work with mongodb. So started to setup a 10 node &lt;a href=&#34;http://www.mongodb.org/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;mongodb&lt;/a&gt; cluster. Since this was for initial spikes, we decided to set this up on a single machine as with the other test setup using &lt;a href=&#34;http://basho.com/riak/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Riak&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Moved my blog to octopress</title>
      <link>https://sadalage.com/post/moved-my-blog-to-octopress/</link>
      <pubDate>Fri, 31 Jan 2014 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/moved-my-blog-to-octopress/</guid>
      <description>&lt;p&gt;Its been about a month since my blog moved to octopress, wanted to write about my experience. I had been running my &lt;a href=&#34;http://sadalage.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;blog&lt;/a&gt; for a some time now using &lt;a href=&#34;http://movabletype.org/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Movable Type&lt;/a&gt; upgrading as and when new versions where released. Over time I realized that upgrading was fraught with errors as lot of steps had to be done manually. Customizing the layout was risky as there was no way to preview your changes and commit only when I was comfortable. With the release of Movable Type 6 there is no longer a free version to download.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Usage of mixed case database object names is dangerous</title>
      <link>https://sadalage.com/post/mixed_case_database_objects/</link>
      <pubDate>Tue, 06 Aug 2013 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/mixed_case_database_objects/</guid>
      <description>&lt;p&gt;Some versions back, Oracle would not allow to create database object names with mixed cases, even if we tried to create them, we could not. In newer versions of Oracle we can create tables, columns, indexes etc using mixed case or lower case, when the names are put inside double quotes. For example&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>10 node Riak cluster on a single machine</title>
      <link>https://sadalage.com/post/node_riak_cluster/</link>
      <pubDate>Thu, 25 Apr 2013 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/node_riak_cluster/</guid>
      <description>&lt;p&gt;When trying to evaluate NoSQL databases, its usually better to try them out. While trying them out, its better to use them with multiple node configurations instead of running single node. Such as clusters in Riak or Replica-set in mongodb maybe even a sharded setup. On our project we evaluated a 10 node Riak cluster so that we could experiment with N, R and W values and decide which values where optimal for us. In Riak here is what N, R and W mean.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Transactions using Groovy.SQL with Spring annotations and connection pools</title>
      <link>https://sadalage.com/post/transactions_using_groovysql/</link>
      <pubDate>Mon, 14 Jan 2013 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/transactions_using_groovysql/</guid>
      <description>&lt;p&gt;When using Groovy with Spring framework,  interacting with the database can be done using the Groovy.SQL class which provides a easy to use interface. When using Groovy.SQL, if we have a need to do transactions, we have the &lt;strong&gt;.withTransaction&lt;/strong&gt; method that accepts a closure, to which we can pass in code to execute within the transaction.&#xA;In our project since we were using spring already, using annotations to define transactions would be a great. Standard &lt;strong&gt;@Transactional&lt;/strong&gt; annotations with Groovy.SQL will not work, since every place where the Groovy.SQL is used a new connection is acquired from the connection pool causing the database work to span multiple connections, which can result in dead-locks on the database. What we really want is that the database connection be the same across all invocations of Groovy.SQL with-in the same transaction started by the annotated method.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Backup in mongodb replica-set configurations</title>
      <link>https://sadalage.com/post/backup_in_mongodb_replica-sets/</link>
      <pubDate>Thu, 27 Dec 2012 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/backup_in_mongodb_replica-sets/</guid>
      <description>&lt;p&gt;There are multiple ways to take backups of mongodb is different configuraitions, one of the configuration that I have been involved recently is replica-sets. When mongodb is running in &lt;strong&gt;replica-set&lt;/strong&gt; configuration, there is a single &lt;strong&gt;primary&lt;/strong&gt; node and multiple &lt;strong&gt;secondary&lt;/strong&gt; nodes. To take backup of the replica-set we can either do a &lt;em&gt;mongodump&lt;/em&gt; of one of the nodes or shutdown one of the secondary nodes and take file copies, since in a replica-set all nodes have the same data (except arbiter). Lets see how we could deal with &lt;em&gt;mongodump&lt;/em&gt; method of taking backup.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Back to blogging</title>
      <link>https://sadalage.com/post/back_to_blogging/</link>
      <pubDate>Sun, 22 Apr 2012 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/back_to_blogging/</guid>
      <description>&lt;p&gt;&lt;figure&gt;&lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;NoSql Distilled&#34;&#xA;    src=&#34;https://sadalage.com/img/nosql.jpg&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&#xA;There has been a long pause in my blogging activity. I was trying to finish of my latest writing engagement in regards to NoSQL. Working with &lt;a href=&#34;http://martinfowler.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Martin Fowler&lt;/a&gt; on &lt;a href=&#34;http://www.amazon.com/gp/product/0321826620/ref=as_li_tf_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0321826620&amp;amp;linkCode=as2&amp;amp;tag=passionaboutd-20&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence&lt;/a&gt; was really fun. This book will provide a concise text and easy way to understand for everyone the rise of the NoSQL movement and help with what kinds of trade-offs need to be made while working with NoSQL.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>MSSQL JDBC Driver behavior&#34;</title>
      <link>https://sadalage.com/post/mssql_jdbc_driver_behavior/</link>
      <pubDate>Sun, 22 Apr 2012 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/mssql_jdbc_driver_behavior/</guid>
      <description>&lt;p&gt;My latest project involves talking to MS-SQL Server using the JDBC driver and Java. While doing this we setup the database connection and had a simple SQL to get the &lt;em&gt;first_name&lt;/em&gt; and &lt;em&gt;last_name&lt;/em&gt; for a unique &lt;em&gt;user_id&lt;/em&gt; from the &lt;em&gt;application_user&lt;/em&gt; table in the database.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>With so much pain, why are stored procedures used so much</title>
      <link>https://sadalage.com/post/why_use_stored_procedures/</link>
      <pubDate>Wed, 19 Jan 2011 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/why_use_stored_procedures/</guid>
      <description>&lt;p&gt;I keep encountering situations where all the business logic for the applications is in stored procedures and the application layer is just calling the stored procedures to get the work done and return the data. There are many problems with this approach some of them are.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Replica sets in MongoDB</title>
      <link>https://sadalage.com/post/replica_sets_in_mongodb/</link>
      <pubDate>Sun, 31 Oct 2010 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/replica_sets_in_mongodb/</guid>
      <description>&lt;p&gt;Replica sets is a feature of MongoDB for Automatic Failover, in this setup there is a primary server and the rest are secondary servers. If the primary server goes down, the rest of the secondary servers choose a new primary via an election process, each server can also be assigned number of votes, so that you can decide the next primary based on data-center location, machine properties etc, you can also start mongo database processes that act only as election tie-breakers these are known as arbiters, these arbiters will never have data, but just act as agents that break the tie.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Schema less databases and its ramifications.</title>
      <link>https://sadalage.com/post/schema_less_databases/</link>
      <pubDate>Tue, 12 Oct 2010 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/schema_less_databases/</guid>
      <description>&lt;p&gt;In the No-SQL land schema-less is a power full feature that is advertised a lot, schema-less basically means you don&amp;rsquo;t have to worry about column names and table names in a traditional sense, if you want to change the column name you just start saving the data using the new column name Lets say you have a document database like mongoDB and you have JSON document as shown below.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Effective use of data for better customer experience.</title>
      <link>https://sadalage.com/post/effective_use_of_data/</link>
      <pubDate>Tue, 31 Aug 2010 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/effective_use_of_data/</guid>
      <description>&lt;p&gt;For more than seven years I have been getting offers for credit cards from Airlines and Banks. One particular bank has been sending me these solicitations for more than seven years. That is 12 mailings per year, more than 72 mailings so far, remember these are physical paper mailings not the electronic kind. I don&amp;rsquo;t like the junk, it hurts the environment and worst of all I think its not good use of the data they have. How hard is it to design a system around the data they have.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Schema design in a document database</title>
      <link>https://sadalage.com/post/schema_design_in_a_document_databases/</link>
      <pubDate>Wed, 28 Apr 2010 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/schema_design_in_a_document_databases/</guid>
      <description>&lt;p&gt;We are using MongoDB on our project, since mongo is document store, schema&#xA;design is somewhat different, when you are using traditional RDBMS data&#xA;stores, one thinks about tables and rows, while using a document database you&#xA;have to think about the schema in a some what different way. Lets say, we want&#xA;to save a customer object, when using a RDBMS we would come up with Customer,&#xA;Address, Phone, Email. They are related to each other as shown below.&#xA;&lt;figure&gt;&lt;img&#xA;    class=&#34;my-0 rounded-md&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    decoding=&#34;async&#34;&#xA;    fetchpriority=&#34;low&#34;&#xA;    alt=&#34;Relational Design&#34;&#xA;    src=&#34;https://sadalage.com/img/customer.jpg&#34;&#xA;    &gt;&lt;/figure&gt;&#xA;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>My experience with MongoDB</title>
      <link>https://sadalage.com/post/my_experience_with_mongodb/</link>
      <pubDate>Sun, 18 Apr 2010 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/my_experience_with_mongodb/</guid>
      <description>&lt;p&gt;The current project I&amp;rsquo;m on is using MongoDB. MongoDB is a document based database, it stores JSON objects as BSON (Binary JSON objects). MongoDB provides a middle ground between the traditional RDBMS and the NOSql databases out there, it provides for indexes, dynamic queries, replication, map reduce and auto sharding, its open source and can be downloaded &lt;a href=&#34;www.mongodb.org&#34; &gt;Mongodb&lt;/a&gt;, starting up mongodb is pretty easy.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Workshop at Enterprise Data World 2010</title>
      <link>https://sadalage.com/post/workshop_at_enterprise_data_warehouse/</link>
      <pubDate>Fri, 29 Jan 2010 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/workshop_at_enterprise_data_warehouse/</guid>
      <description>&lt;p&gt;Doing a workshop on &lt;a href=&#34;http://edw2010.wilshireconferences.com/sessionPop.cfm?confid=38&amp;amp;proposalid=2204&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Agile Database Development&lt;/a&gt; at &lt;a href=&#34;http://edw2010.wilshireconferences.com/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Enterprise Data World 2010&lt;/a&gt; at SF. See you there.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Testing in data conversion projects</title>
      <link>https://sadalage.com/post/automated_data_compare_in_migrations/</link>
      <pubDate>Wed, 18 Nov 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/automated_data_compare_in_migrations/</guid>
      <description>&lt;p&gt;When working on projects involving Conversion of data or Migration/Moving of data from a legacy database. The testing effort is enormous and testing takes a lot of time, some test automation can help this effort.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Ruby OCI 2.0 Array binding</title>
      <link>https://sadalage.com/post/ruby_oci_20_array_binding/</link>
      <pubDate>Thu, 08 Oct 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/ruby_oci_20_array_binding/</guid>
      <description>&lt;p&gt;We have been doing some data moving lately using Ruby and &lt;a href=&#34;http://ruby-oci8.rubyforge.org&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Ruby-OCI&lt;/a&gt;. We started with Ruby OCI 1.0 and did use prepared statements with bind variables (since we are using oracle database and pulling data from an oracle database and pushing data to an oracle database). Later we found this really cool feature in Ruby-OCI8 2.0 where you can bind a whole array and just make one database trip for many database operations.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Create an Index for all FK Columns in the database</title>
      <link>https://sadalage.com/post/create_an_index_for_all_fk_columns/</link>
      <pubDate>Thu, 03 Sep 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/create_an_index_for_all_fk_columns/</guid>
      <description>&lt;p&gt;Most of the time I have seen database foreign key constraints on tables without indexes on those columns. Lets say the application is trying to delete a row from the CUSTOMER table&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Materialized views and database links in oracle.</title>
      <link>https://sadalage.com/post/materialized_views_and_databases/</link>
      <pubDate>Mon, 10 Aug 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/materialized_views_and_databases/</guid>
      <description>&lt;p&gt;Recently one of my colleague &lt;a href=&#34;http://blog.norrissoftware.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Jeff Norris&lt;/a&gt; had a weird error. He was trying to build a materialized view over some tables in his local database and some tables in his remote database using database links the sql to create the view ran fine and provided the results as expected, but when put inside a materialized view statement complained with &lt;strong&gt;ORA-00942&lt;/strong&gt; errors.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Perfectly good data.. wasted</title>
      <link>https://sadalage.com/post/use_the_data_you_have_already/</link>
      <pubDate>Wed, 05 Aug 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/use_the_data_you_have_already/</guid>
      <description>&lt;p&gt;Okay this is kind of a rant, maybe I&amp;rsquo;m too picky or just that I hate to see perfectly good data not being used.  This is how it goes..&lt;/p&gt;&#xA;&lt;!-- more --&gt;&#xA;&lt;p&gt;I go regularly to this &lt;a href=&#34;http://www.target.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;store&lt;/a&gt; to get Horizon organic milk for my family, about 60% of the time I see milk I need NOT in stock, okay I can live with that, may be lots of folks are buying organic milk, but not when it happens frequently, especially when the store knows how much milk was ordered (or supplied from the warehouse) and how much milk was sold, the store should be able to figure out that organic milk gets sold out pretty fast, putting my Business Intelligence (BI) hat on, I think the store should be able to predict when they are going to run out of organic milk ( for that matter any product), its especially frustrating when they have all the data they need to get it done.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Explicitly rollback when you encounter a deadlock.</title>
      <link>https://sadalage.com/post/explicitly_rollback_when_you_get_deadlock/</link>
      <pubDate>Tue, 26 May 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/explicitly_rollback_when_you_get_deadlock/</guid>
      <description>&lt;p&gt;Dead lock is caused in the database when you have resources (connections) waiting for other connections to release locks on the rows that are needed by the session, resulting in all session being blocked. Oracle automatically detects deadlocks are resolves the deadlock by rolling back the statement  in the transaction that detected the deadlock. Thing to remember is that &lt;strong&gt;last statement is rolled back and not the whole transaction&lt;/strong&gt;, which means that if you had other modifications, those rows are still locked and the application should make sure that it does a explicit rollback on the connection.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Oracle for the Mac</title>
      <link>https://sadalage.com/post/oracle_for_the_mac/</link>
      <pubDate>Thu, 14 May 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/oracle_for_the_mac/</guid>
      <description>&lt;p&gt;Ever since I moved to the Mac, I had to run some other OS inside a VM so that I could run Oracle and use it, since Oracle was not available for the the Mac. Now that is no longer the case. Oracle 10gR2 (10.2.0.4) is now available for Mac&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>In Oracle 11g password is case sensitive</title>
      <link>https://sadalage.com/post/oracle_11g_password_is_case_sensitive/</link>
      <pubDate>Wed, 06 May 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/oracle_11g_password_is_case_sensitive/</guid>
      <description>&lt;p&gt;In Oracle 10g and before we all know that passwords are not case sensitive, so PASSWORD, Password, password would let you in and everything would be okay.&lt;/p&gt;&#xA;&lt;p&gt;If you upgrade to Oracle 11g (I know lot of you are waiting for 11gR2), you will find that passwords are case sensitive. Here is an example of case sensitive passwords.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Oracle Metadata can be mis-leading</title>
      <link>https://sadalage.com/post/oracle_metadata_can_be_misleading/</link>
      <pubDate>Tue, 31 Mar 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/oracle_metadata_can_be_misleading/</guid>
      <description>&lt;p&gt;Oracle has metadata about all its objects in various tables/views. One such view is the USER_OBJECTS or ALL_OBJECTS, this view has a column named as STATUS which shows you if the given object is VALID or INVALID. The status applies to DB Code (Stored Procedures, Functions, Triggers etc).&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Presentation on Database Refactoring</title>
      <link>https://sadalage.com/post/presentation_on_database_refactoing/</link>
      <pubDate>Thu, 26 Mar 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/presentation_on_database_refactoing/</guid>
      <description>&lt;p&gt;My Presentation on Database Refactoring at QCon  was recorded and is live now on infoQ &lt;a href=&#34;http://www.infoq.com/presentations/refactoring-databases&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;here&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Storing just the time in Oracle</title>
      <link>https://sadalage.com/post/storing_time_in_oracle/</link>
      <pubDate>Thu, 12 Feb 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/storing_time_in_oracle/</guid>
      <description>&lt;p&gt;We came across a need to save just the Time in the database, the requirement is to store time of the day, like say the user likes to have Breakfast at 8.15AM and Lunch at 12.32PM etc. Off course oracle does not have a time only data type.  So we ended up using DATE as the data type and just setting the time. for example:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Considerations when using stored procedures for doing CRUD</title>
      <link>https://sadalage.com/post/considerations_when_using_procedures/</link>
      <pubDate>Tue, 03 Feb 2009 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/considerations_when_using_procedures/</guid>
      <description>&lt;p&gt;Some environments like to have access to the database tables routed via stored procedures.&#xA;Instead of using Create/Read/Update/Delete aka CRUD with DML, stored procedures are invoked with the parameters to perform the required operation. I&amp;rsquo;m not arguing about the benefits/pitfalls of this approach, if you have to do stored procedures, here are some things to look at.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Article about Behavior Driven Database Design is out</title>
      <link>https://sadalage.com/post/article_about_behavior_driven/</link>
      <pubDate>Mon, 22 Dec 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/article_about_behavior_driven/</guid>
      <description>&lt;p&gt;Recently I have been thinking a lot about making specification and behavior expected about the database and the code that interfaces with the databases &lt;strong&gt;executable&lt;/strong&gt;. The Behavior Driven Design has a lot of parallels in the database world.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Hibernate weirdness with property names</title>
      <link>https://sadalage.com/post/hibernate_weirdness_with_properties/</link>
      <pubDate>Fri, 24 Oct 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/hibernate_weirdness_with_properties/</guid>
      <description>&lt;p&gt;Consider this Hibernate mapping&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nd&#34;&gt;@Column&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;qReferenceId&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;public&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Long&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;getQReferenceId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;qReferenceId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;Where &lt;em&gt;qReferenceId&lt;/em&gt; is data provided to our application via a external reference, we do not have a QReference Object or Table for FK references. When trying to query this object using DetachedQuery, this Simple expression was used.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using Explicit Order By in your SQL Statements</title>
      <link>https://sadalage.com/post/using_explicit_order_by_in_sql/</link>
      <pubDate>Tue, 30 Sep 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/using_explicit_order_by_in_sql/</guid>
      <description>&lt;p&gt;Recently when our test databases where upgraded new version of Oracle, we started noticing that the order in which some drop down lists were being displayed was not correct. It turns out that the SELECT statement we had, did not have a ORDER BY clause and the data was being returned in the ORDER of the creation of rows (in the order of ROWID) when the database was upgraded these ROWID&amp;rsquo;s got changed and hence the ORDER of the data being shown in the drop down lists.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Moved to a Mac</title>
      <link>https://sadalage.com/post/moved_to_a_mac/</link>
      <pubDate>Mon, 01 Sep 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/moved_to_a_mac/</guid>
      <description>&lt;p&gt;Couple of weeks back I was given a choice to upgrade my work Laptop to a Mac Book Pro or a Windows Laptop. I choose Mac ( I know everyone is into macs nowadays). The transition was pretty good, with the exception of moving my oracle database from windows to mac, since there is no native installation of oracle on mac I had to use VMWare fusion to install oracle.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Create a Index for every Foreign Key constraint created</title>
      <link>https://sadalage.com/post/create_a_index_for_every_foreign_key/</link>
      <pubDate>Tue, 15 Jul 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/create_a_index_for_every_foreign_key/</guid>
      <description>&lt;p&gt;When creating a Foreign Key constraint on the database as shown below&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ALTER TABLE BOOK ADD&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    (CONSTRAINT FK_BOOK_AUTHOR FOREIGN KEY (AUTHORID)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     REFERENCES AUTHOR)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;In the above example we are telling the database to check if the BOOK.AUTHORID is a valid value in the Author.AuthorID. When the Author table is being changed, the database does data verification on the BOOK table using SELECT against the BOOK table for the AUTHORID some thing like this&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Version Control your work..</title>
      <link>https://sadalage.com/post/version_control_your_work/</link>
      <pubDate>Fri, 06 Jun 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/version_control_your_work/</guid>
      <description>&lt;p&gt;So we version control/source control everything on our project.. code/data/artifacts/diagrams etc. yesterday I said why not extend it to my writings to everything I have. So I started this long journey of refactoring my folder layout and making a nice folder structure to hold all the things I have written about have other artifacts in the process of writing and moved them all to subversion, now all my example code and writings are all under version control that gets backed up everyday&amp;hellip;. feels liberating&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Japanese Version released&#34;</title>
      <link>https://sadalage.com/post/japanese_version_released/</link>
      <pubDate>Wed, 04 Jun 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/japanese_version_released/</guid>
      <description>&lt;p&gt;Japanese translation of &lt;a href=&#34;http://databaserefactoring.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Refactoring Databases: Evolutionary Database Design&lt;/a&gt;has been released, thanks to Yasuo Honda for the information. The Japanese version can be found &lt;a href=&#34;http://www.pej-hed.jp/washo/1804.html&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;here&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Tool support for Database Refactoring</title>
      <link>https://sadalage.com/post/tool_support_for_database_refactoring/</link>
      <pubDate>Tue, 20 May 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/tool_support_for_database_refactoring/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m always on the lookout for better tool support to do database refactoring. Just noticed that &lt;a href=&#34;http://www.liquibase.org&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;liquibase&lt;/a&gt; has come out with a IntelliJ plugin to support database refactoring.&lt;/p&gt;&#xA;&lt;p&gt;This is really cool and hopefully one of long list of tools that will support &lt;a href=&#34;http://databaserefactoring.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;database refactoring&lt;/a&gt; in the future. so enjoy&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Writing a SQL to generate a SQL</title>
      <link>https://sadalage.com/post/writing_a_sql_to_generate_a_sql/</link>
      <pubDate>Tue, 06 May 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/writing_a_sql_to_generate_a_sql/</guid>
      <description>&lt;p&gt;We had a weird requirement on our project recently..&lt;/p&gt;&#xA;&lt;blockquote&gt;&lt;p&gt;Find all the Rows in All the tables that do not comply with the Constraints that we have in development but not in QA environments&lt;/p&gt;&#xA;&lt;/blockquote&gt;</description>
      
    </item>
    
    <item>
      <title>Setup and Teardown of database during testing</title>
      <link>https://sadalage.com/post/setup_and_teardown_of_database/</link>
      <pubDate>Thu, 17 Apr 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/setup_and_teardown_of_database/</guid>
      <description>&lt;p&gt;When doing Performance Testing or running Unit/Functional tests on a database, there is a need to periodically get the database to a known state, so that the tests behave in a predictable way and to get rid of all the data created by the tests. Some of the ways to get a clean database are.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Podcast on Keeping Gray code Fit</title>
      <link>https://sadalage.com/post/podcast_on_keeping_gray_code_fit/</link>
      <pubDate>Fri, 18 Jan 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/podcast_on_keeping_gray_code_fit/</guid>
      <description>&lt;p&gt;Me, Andy, Jeff and Marjorie discuss how to keep a long running project fit in this &lt;a href=&#34;http://www.thoughtworks.com/what-we-say/podcasts.html&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Podcast&lt;/a&gt;,  also on &lt;a href=&#34;http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=269759218&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;iTunes&lt;/a&gt;. We discuss the management of technology, people, processes and tools on longer and more mature applications. Specific topics such as refactoring, knowledge management, innovation, staffing, production support and others are covered.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Experience using DBDeploy on my project</title>
      <link>https://sadalage.com/post/exprerience_using_dbdeploy_on_project/</link>
      <pubDate>Mon, 14 Jan 2008 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/exprerience_using_dbdeploy_on_project/</guid>
      <description>&lt;p&gt;We have been using &lt;a href=&#34;http://DBDeploy.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;DBDeploy&lt;/a&gt; on my project for more than 6 months now and wanted to show how things are going. First lets talk about set up, we are using dbdeploy in our Java development environment with ANT as our build scripting tool, against a Oracle 10g database.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Lessons from Re-Learning</title>
      <link>https://sadalage.com/post/relearning/</link>
      <pubDate>Thu, 27 Dec 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/relearning/</guid>
      <description>&lt;p&gt;I have been working on a project that I had worked in 2005, trying to get a handle on what I had done about 3 years back. Exploring code and the database has been fun, also discovering the data layout and building new set of data for production has been extremely entertaining. What I learnt from this whole experience was this &lt;em&gt;if your code(application or other wise) is not expecting data, this data should not be provided or even considered valid by the database, the database should be designed such that it does not even allow invalid combinations of the data.&lt;/em&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Cannot make it out to XP Day London</title>
      <link>https://sadalage.com/post/cannot_make_it_out_to_xp_day_london/</link>
      <pubDate>Tue, 13 Nov 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/cannot_make_it_out_to_xp_day_london/</guid>
      <description>&lt;p&gt;After a lot of frustration about my schedule, I have had to come to this conclusion, that I cannot physically make it to &lt;a href=&#34;http://xpday.org/node/98&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;London, XP day&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m going to miss it. Nick Ashley is going to take up my spot and I know he will do a great job.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Why do Evolutionary Design</title>
      <link>https://sadalage.com/post/why_do_evolutionary_design/</link>
      <pubDate>Mon, 05 Nov 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/why_do_evolutionary_design/</guid>
      <description>&lt;p&gt;Why do Evolutionary Design or Iterative Design or Incremental Design?&#xA;Everyone who has not worked in an evolutionary manner asks this? My answer, if you think the system you designed is &lt;strong&gt;NOT GOING TO CHANGE EVER&lt;/strong&gt; then sure you can do design once and deploy once and you are done, move on to next project. But tell me one project you have been on, that does not have any changes in requirements, changes in technology, changes in look and feel etc after it was deployed.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>ThoughtWorks at Oracle Open World</title>
      <link>https://sadalage.com/post/thoughtworks_at_oracle_open_world/</link>
      <pubDate>Tue, 30 Oct 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/thoughtworks_at_oracle_open_world/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://thoughtworks.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Thoughtworks&lt;/a&gt; is going to be at &lt;a href=&#34;http://www.oracle.com/openworld/2007/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Oracle Open World&lt;/a&gt;. I&amp;rsquo;m excited about this especially since it will give ThoughtWorks and Me to talk about software practices and how to apply these software practices to the database development world, off course I will talk about my books Refactoring Databases and Continuous Database Integration. ThoughtWorks will have a booth at &lt;em&gt;343 Moscone South&lt;/em&gt; and I will be there on Nov 14.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Frameworks should not constrain your table design</title>
      <link>https://sadalage.com/post/frameworks_should_not_constrain_design/</link>
      <pubDate>Wed, 03 Oct 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/frameworks_should_not_constrain_design/</guid>
      <description>&lt;p&gt;Recently talking to someone about a persistence framework that they are using,&#xA;this framework creates a rows in the database table with just Primary Key value&#xA;and then later on updates the table row with values for other columns. Because&#xA;of this framework, the tables cannot have any NOT-NULL constraints defined.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Lesson learnt changing firewall settings</title>
      <link>https://sadalage.com/post/lesson_learnt_firewall/</link>
      <pubDate>Thu, 13 Sep 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/lesson_learnt_firewall/</guid>
      <description>&lt;p&gt;On any machine running network related services, like in my case Oracle Listener and Dispatch Services. Don&amp;rsquo;t rebuild/stop and restart the firewall stuff like iptables.&lt;/p&gt;&#xA;&lt;p&gt;Had to spend a lot of time, figuring out what was going on. So hard lesson learnt don&amp;rsquo;t mess with iptables when you are running oracle listener/dispatcher&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>When does evolutionary design happen?</title>
      <link>https://sadalage.com/post/when_does_evolutionary_design/</link>
      <pubDate>Tue, 28 Aug 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/when_does_evolutionary_design/</guid>
      <description>&lt;p&gt;A question I get, mostly related to the evolutionary database design and development. When the pair (team) gets a new feature (story) to work on, the team looks at the existing table/database design and sees if the current design is enough to implement the feature they are working on. If the currency database design does support the feature they are trying to implement, then they do not have to change the database at all, they will move on to implement the feature and change the application code as necessary.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Parsing mapping files for usage information</title>
      <link>https://sadalage.com/post/parsing_mapping_files_for_usage_information/</link>
      <pubDate>Thu, 19 Jul 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/parsing_mapping_files_for_usage_information/</guid>
      <description>&lt;p&gt;Currently working on a legacy application, thats been in production for a long time now. I wanted to find out what are the Tables and Columns being used by the application. Since we could see that some table columns where not being used.&#xA;We are using a Object Relational mapping framework on the project, so we decided to write some code that would parse all the mapping files and gives us a list of table names and columns. We used this list to create rows in a table with two columns tablename and columnname. Once the table had this data, we just ran one more SELECT against the metadata of the database and our table which pretty much gave us a list of Table and Columns that we are not using&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Long Running Data Migrations during Database Refactorings</title>
      <link>https://sadalage.com/post/long_running_data_migrations/</link>
      <pubDate>Fri, 29 Jun 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/long_running_data_migrations/</guid>
      <description>&lt;p&gt;When you are refactoring large databases, you will have certain tables that have millions of rows, so lets say we are doing the &lt;a href=&#34;http://databaserefactoring.com/MoveColumn.html&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Move Column&lt;/a&gt; refactoring, moving the TaxAmount column from Charge table which has millions of rows to TaxCharge table. Create the TaxAmount column in the TaxCharge table. Then have to move the data from the TaxAmount column in the Charge table to the TaxAmount column you created in the TaxCharge table.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Enforcing your assumptions about database functionality</title>
      <link>https://sadalage.com/post/enforcing_your_assumptions/</link>
      <pubDate>Fri, 08 Jun 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/enforcing_your_assumptions/</guid>
      <description>&lt;p&gt;When you are writing xUnit tests you are in certain ways trying to make sure that the test breaks when the code that is being tested changes the assumptions you made when writing the Test and Production code.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>XP2007 Tutorial</title>
      <link>https://sadalage.com/post/xp2007_tutorial/</link>
      <pubDate>Fri, 08 Jun 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/xp2007_tutorial/</guid>
      <description>&lt;p&gt;I will presenting about Database Refactoring: Evolutionary Database Design at &lt;a href=&#34;http://xp2007.org&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;XP 2007&lt;/a&gt;  here is the &lt;a href=&#34;http://www.xp2007.org/index.php?option=com_wrapper&amp;amp;Itemid=88&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Tutorial schedule&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>ThoughtWorks Master class series in India</title>
      <link>https://sadalage.com/post/thoughtworks_master_class_series_india/</link>
      <pubDate>Tue, 08 May 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/thoughtworks_master_class_series_india/</guid>
      <description>&lt;p&gt;I will be presenting about Evolutionary Database Design and Database Refactoring at &lt;a href=&#34;http://twi.co.in&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;ThoughtWorks Master Class Series 2007&lt;/a&gt; at Bangalore on May 19th and Pune on May 26. This will be the first time I will be presenting in India.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>My Latest eBook is Out&#34;</title>
      <link>https://sadalage.com/post/recipes_for_continuous_database_integration/</link>
      <pubDate>Mon, 23 Apr 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/recipes_for_continuous_database_integration/</guid>
      <description>&lt;p&gt;After finishing the first &lt;a href=&#34;http://databaserefactoring.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Refactoring Databases&lt;/a&gt; book. I started on a short ebook project, this book was going to tackle on a very specific technical topic mentioned in the first book. I wanted to write about all the specific scenarios and all the techniques I follow on the various projects.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Moscow</title>
      <link>https://sadalage.com/post/moscow/</link>
      <pubDate>Wed, 11 Apr 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/moscow/</guid>
      <description>&lt;p&gt;Last week I was at SD Best Practices in Moscow, doing a presentation on &amp;ldquo;Refactoring Databases: Evolutionary Database Design&amp;rdquo;. Moscow seems like a interesting place, loads of huge buildings, squares, fountains and roads. Things some how feel rundown, feels like a player trying to regain his former ability or glory.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Promoting Thoughtworks</title>
      <link>https://sadalage.com/post/promoting_thoughtworks/</link>
      <pubDate>Tue, 03 Apr 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/promoting_thoughtworks/</guid>
      <description>&lt;p&gt;I have been working at &lt;a href=&#34;http://www.thoughtworks.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Thoughtworks&lt;/a&gt; for 8 years now, its a fun place to work. Reason I&amp;rsquo;m blogging about this, ThoughtWorks is hiring in the US, UK, Australia, India, China and Canada. So go ahead send your resume to &lt;a href=&#34;mailto:work@thoughtworks.com&#34; &gt;work@thoughtworks.com&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Winning a award</title>
      <link>https://sadalage.com/post/winning_a_award/</link>
      <pubDate>Tue, 03 Apr 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/winning_a_award/</guid>
      <description>&lt;p&gt;Last week I received the good news. The &lt;a href=&#34;http://databaserefactoring.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;book&lt;/a&gt; I co-authored with Scott Ambler won the 2007 Jolt Productivity Award in the Technical Books category. I was dumb enough not to attend the awards ceremony and receive the award, anyway when I started on the book project couple of years back I was afraid if the book would do justice to the Martin Fowler signature series, under which this book appears. The Jolt award award and all the comments I have received from many people in the last year, put me at easy, give me the feeling that finally I can relax and not worry about letting down Martin&amp;rsquo;s signature series.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Data Quality and Code Quality</title>
      <link>https://sadalage.com/post/data_quality_and_code_quality/</link>
      <pubDate>Thu, 15 Feb 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/data_quality_and_code_quality/</guid>
      <description>&lt;p&gt;Recently we had peculiar problem. Some of the data in the database was not being created in a proper fashion. Once we found that out we fixed the problem in the application. The customer still had the perception that the code is still broken, because the fixed code was now interacting with the data that was broken (since it was created much earlier by code that was broken). Data has a life of its own (more on this later)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Nulls need special love</title>
      <link>https://sadalage.com/post/nulls_need_special_love/</link>
      <pubDate>Thu, 15 Feb 2007 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/nulls_need_special_love/</guid>
      <description>&lt;p&gt;The following SELECT statement in code&lt;/p&gt;&#xA;&lt;div class=&#34;highlight-wrapper&#34;&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;stmt&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DB&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;prepare&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;select id,name,state,zip &amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;from customer &amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;where &amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;phone = ? &amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;        &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;and active = ?&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;stmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setString&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerPhone&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;stmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setBoolean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isActive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;stmt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;execute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;p&gt;where &lt;strong&gt;customerPhone&lt;/strong&gt; and &lt;strong&gt;isActive&lt;/strong&gt; are values you would pass in to the SELECT before its executed. Everything is fine when one day the value passed for &lt;strong&gt;customerPhone&lt;/strong&gt; is NULL. For a database (Oracle is what I know most) a NULL will never be equal to NULL , the SELECT will not return rows where the customer.phone is NULL, leading to wrong results. The SELECT will have to be changed to&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Implementing Make Column Non Nullable</title>
      <link>https://sadalage.com/post/implementing_make_column_non_nullable/</link>
      <pubDate>Fri, 15 Dec 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/implementing_make_column_non_nullable/</guid>
      <description>&lt;p&gt;While working on a Legacy Application with Legacy Database design as part of fixing a bug, I thought this bug would not have ever happened if a particular column was defined as &lt;strong&gt;Non Nullable&lt;/strong&gt; since this particular column was the identifier to the parent table.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Database Testing revisited</title>
      <link>https://sadalage.com/post/database_testing_revisited/</link>
      <pubDate>Thu, 09 Nov 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/database_testing_revisited/</guid>
      <description>&lt;p&gt;Some time ago I wrote about what it means to do database testing.. more I think about this and having had some strange situations recently I want to add more to the list of things we should be testing.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Kids teaching International Relations&#34;</title>
      <link>https://sadalage.com/post/kids_teaching_international_relations/</link>
      <pubDate>Tue, 26 Sep 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/kids_teaching_international_relations/</guid>
      <description>&lt;p&gt;You learn a lot from kids, and this lesson I will never forget.&lt;/p&gt;&#xA;&lt;p&gt;So I&amp;rsquo;m at Lyon (in France) airport and there are a couple of kids (4-5 year olds) playing in the airport play area which had slides, call these two kids TA and TB my daughter call her AA joins these kids and they all start playing with the slide.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Database Migration Utility</title>
      <link>https://sadalage.com/post/database_migration_utility/</link>
      <pubDate>Mon, 28 Aug 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/database_migration_utility/</guid>
      <description>&lt;p&gt;I have taken up the hobby of searching the opensource landscape for tools that help me do Agile database development. I&amp;rsquo;m going to write about all the Tools that I come across that help me, my preference is opensource software but not limited to it. I will try to provide some sound examples and share my experiences with all that tools that I come across and share the example code I used.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Inactivity&#34;</title>
      <link>https://sadalage.com/post/inactivity/</link>
      <pubDate>Wed, 26 Jul 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/inactivity/</guid>
      <description>&lt;p&gt;I had been on vacation for sometime. Started back work and getting connected with work and life again.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Database Testing</title>
      <link>https://sadalage.com/post/database_testing/</link>
      <pubDate>Tue, 23 May 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/database_testing/</guid>
      <description>&lt;p&gt;What does it mean to test your Database? usually when someone mentions database testing, what is that they want to test. The application code that interacts with the database, or the sql code the resides in the database like stored procedures and triggers etc. I see all these aspects to database testing as important.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Move your DBAs to the Project team locations&#34;</title>
      <link>https://sadalage.com/post/move_dba_to_project_team/</link>
      <pubDate>Tue, 23 May 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/move_dba_to_project_team/</guid>
      <description>&lt;p&gt;Many IT organizations I have seen have groups of specialists, typical are UNIX Group, DBA group etc.&lt;/p&gt;&#xA;&lt;p&gt;When a project starts the developers on the project have to meet with all the Groups (I have more experience with the DBA group, so I write with the DBA group in mind) that they need to interact with and explain to the groups their design, the projects operational needs and other requirements, later when development starts they have to email these groups about all the setup that needs to be done and also the day to day changes that are needed. This way of working slows down the productivity of the team and the organization.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Automated Tablespace deployment</title>
      <link>https://sadalage.com/post/automated_tablespace_deployment/</link>
      <pubDate>Mon, 01 May 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/automated_tablespace_deployment/</guid>
      <description>&lt;p&gt;In development mode you don&amp;rsquo;t want to worry about which table goes into what Tablespace in production as it complicates development environments. The production DBA&amp;rsquo;s want to have their input and control over deciding what table goes into what Tablespace. To allow for this I used a mapping scheme as shown below.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>The day I received my Boo</title>
      <link>https://sadalage.com/post/database_refactoring_book/</link>
      <pubDate>Sun, 26 Mar 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/database_refactoring_book/</guid>
      <description>&lt;p&gt;This last week I received my copies of the &lt;a href=&#34;http://www.databaserefactoring.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;book&lt;/a&gt;, for the first time I could touch what I had worked on for almost a year and half now, I could see it flip the pages. When I opened the UPS box and saw the book for the first time it felt great but in a minute or two I was not feeling anything, after some tea and some walking around I took the book in my hands and started flipping the pages this is when the real feeling started to sink in, but still I was not sure of the situation, was not really sure if it was real, after about 2-3 hours when I saw the book and held the book and started reading, I was started feeling the joy the happiness and all the goodness. I think when I see it being read by others then I will feel a lot different, the other day I saw Nick take out the book out of his backpack I was thrilled to see it being read.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>To allow NULLs or NOT</title>
      <link>https://sadalage.com/post/to_null_or_not/</link>
      <pubDate>Wed, 08 Feb 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/to_null_or_not/</guid>
      <description>&lt;p&gt;Database designs I have seen tend to &lt;em&gt;not constrain&lt;/em&gt; the data in the database. For example make the &lt;em&gt;Item.ManufacturerID&lt;/em&gt; non-nullable and make it a foreign key to the &lt;em&gt;Manufacturer&lt;/em&gt; table. Similarly &lt;em&gt;Manufacturer.Name&lt;/em&gt; and &lt;em&gt;Item.Rate&lt;/em&gt; as non-nullable columns. In any greenfield application (existing production application is a topic for another post). When you design table(s) lets say you have &lt;em&gt;Item&lt;/em&gt; and &lt;em&gt;Manufacturer&lt;/em&gt; table as shown below&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Communication</title>
      <link>https://sadalage.com/post/communication/</link>
      <pubDate>Fri, 03 Feb 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/communication/</guid>
      <description>&lt;p&gt;Why is that many a time I say something and the person hears something else.&lt;/p&gt;&#xA;&lt;p&gt;I have been wondering is it me or is it just the way people listen or interpret my words. How can I communicate better, making it easier for myself and cause less of an hassle for myself and all the ones around me.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Refactoring Data</title>
      <link>https://sadalage.com/post/refactoring_databases/</link>
      <pubDate>Thu, 19 Jan 2006 00:00:00 +0000</pubDate>
      
      <guid>https://sadalage.com/post/refactoring_databases/</guid>
      <description>&lt;p&gt;Many a times &lt;a href=&#34;http://refactoring.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Refactoring&lt;/a&gt; is talked about in the context of code, recently I finished working with Scott Ambler on &lt;a href=&#34;http://www.databaserefactoring.com&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Database Refactoring&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Lately I have been working on changing data in an production database, and have been wondering how do I define it, Data Refactoring? what are the patterns of Data Refactoring. First let me talk about what I mean by Data Refactoring.&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
