Create and Update Database Schema

Introduction

When developing an application using DDD one starts by trying to define a model of the domain for/in which the application should be used. At the same time you try to establish the so called ubiquitous language. At some point you might need to store and or retrieve data into or from a data source. Very often this data source is a relational database. But it's not necessarily always the case. It could as well be a web service or a XML document. That leads me to the notion that "the database is just an implementation detail of the application". Or if I turn this sentence a little bit around "...it should not be the database (-schema) that determines the design of an application but rather should the database schema be a natural outcome of the domain model...". I know, this is NOT what a DBA likes to hear. But trust me I have developed many applications in the past where the first thing that was designed of the application was the entity relationship diagram (ERD)... I have also implemented quite a lot of stored procedures on Oracle and SQL server in the past. So I know both sides of the argument.

Assuming that the database schema should be an implementation detail of the overall application it would be great if the schema could be somehow auto-generated from the domain model. As you might expect, when using NHibernate as the ORM tool this is possible. We have to distinguish between the two possibilities

  • (re-) create a new schema from scratch
  • updating an existing schema

Create Schema

The model

To start we define a very basic model

image

The Mappings

In our data layer we define the two mapping files Product.hbm.xml and Category.hbm.xml. The former's content is

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   namespace="Domain"
                   assembly="Domain">
  <class name="Product">
    <id name="Id">
      <generator class="guid"/>
    </id>
    <property name="Name"/>
    <many-to-one name="Category" class="Category"/>
  </class>
</hibernate-mapping>

and the latter's content is

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   namespace="Domain"
                   assembly="Domain">
  <class name="Category">
    <id name="Id">
      <generator class="guid"/>
    </id>
    <property name="Name"/>
  </class>
</hibernate-mapping>

Note that we have defined only the absolute minimum needed and rely heavily on the (meaningful) defaults provided by NHibernate.

Tests

To analyze the database schema creation script generated by NHibernate we write the following test

[TestFixture]
public class CreateSchema_Fixture
{
    private Configuration _cfg;
 
    [SetUp]
    public void SetupContext()
    {
        _cfg = new Configuration();
        _cfg.Configure();
        _cfg.AddAssembly(Assembly.LoadFrom("DataLayer.dll"));
    }
 
    [Test]
    public void Create_a_database_schema_creation_script()
    {
        var export = new SchemaExport(_cfg);
        var sb = new StringBuilder();
        TextWriter output = new StringWriter(sb);
        export.Execute(true, false, false, false, null, output);
    }
}

Note that the configuration file hibernate.cfg.xml has the following content in our case

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string">Server=(local);Database=NHibernateFAQ;Integrated Security=SSPI;</property>
    
    <property name="show_sql">true</property>
  </session-factory>
</hibernate-configuration>

That is, we are using a SQL Server 2005 database called NHibernateFAQ. It is not necessary to have SQL Server 2005 installed though since we are only generating (and analyzing) the scripts generated by NHibernate and not accessing the database itself!

The output generated by the above test is similar to this

if exists (select 1 from sys.objects 
           where object_id = OBJECT_ID(N'[FK1F94D86A9F364CC5]') 
           AND parent_object_id = OBJECT_ID('Product'))
    alter table Product  drop constraint FK1F94D86A9F364CC5
 
if exists (select * from dbo.sysobjects 
           where id = object_id(N'Product') 
           and OBJECTPROPERTY(id, N'IsUserTable') = 1) 
    drop table Product
if exists (select * from dbo.sysobjects 
           where id = object_id(N'Category') 
           and OBJECTPROPERTY(id, N'IsUserTable') = 1) 
    drop table Category
 
create table Product (Id UNIQUEIDENTIFIER not null, 
                      Name NVARCHAR(255) null, 
                      Category UNIQUEIDENTIFIER null, 
                      primary key (Id))
create table Category (Id UNIQUEIDENTIFIER not null, 
                       Name NVARCHAR(255) null, 
                       primary key (Id))
 
alter table Product add constraint FK1F94D86A9F364CC5 
foreign key (Category) references Category

That's really wonderful for a quick shot!

The default for a column is that it is nullable and the default type and length for a string type field is NVARCHAR(255).

Mandatory columns and maximal length of column

But there are a few details that we might want to improve. First we want to make the Name columns mandatory (NOT NULL). Nothing easier than that; just add an attribute not-null="true" to the mapping files where appropriate. Also we want to limit the length of the Name column to given amount, e.g. 50 characters. Just add a length="50" to the appropriate property of the mapping files. The create table part of the schema creation script is then

create table Product (Id UNIQUEIDENTIFIER not null, 
                      Name NVARCHAR(50) not null, 
                      Category UNIQUEIDENTIFIER null, 
                      primary key (Id))
 
create table Category (Id UNIQUEIDENTIFIER not null, 
                       Name NVARCHAR(20) not null, 
                       primary key (Id))

Foreign Keys

There is still a detail in the script that might disturb you. It's the name of the foreign key constraint between the Product and the Category tables. If we want to choose a name we can use the foreign-key attribute on the many-to-one node of the mapping file, e.g.

<many-to-one name="Category" class="Category" foreign-key="fk_Product_Category"/>

now the corresponding snippet of the script is

if exists (select 1 from sys.objects 
           where object_id = OBJECT_ID(N'[fk_Product_Category]') 
           AND parent_object_id = OBJECT_ID('Product'))
    alter table Product  drop constraint fk_Product_Category
...
alter table Product add constraint fk_Product_Category 
foreign key (Category) references Category

Unique Constraints

If we want to guarantee that the Name property of the Category class is unique we can do this by either using business logic to enforce this requirement or define a unique constraint on the database. Let's have a look at the latter. Just add the attribute unique="true" to the mapping of the Name property in the mapping file for the Category class. That is

<property name="Name" not-null="true" length="20" unique="true"/>

and the script generated is this

create table Category (
    Id UNIQUEIDENTIFIER not null, 
    Name NVARCHAR(20) not null unique, 
    primary key (Id)
)

If you want to define a unique constraint which spans multiple columns then you have to resort to the attribute unique-key. Let's assume we have a Person class like

public class Person
{
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

and we want to define a unique constraint on the combination of the FirstName and LastName columns then our mapping file looks like this

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   namespace="Domain"
                   assembly="Domain">
  <class name="Person">
    <id name="Id">
      <generator class="guid"/>
    </id>
    <property name="FirstName" not-null="true" length="50" unique-key="uk_Person_Name"/>
    <property name="LastName" not-null="true" length="50" unique-key="uk_Person_Name"/>
  </class>
</hibernate-mapping>
Note that the name you choose for the unique-key is not important (here "uk_Person_Name"). Just use the same name for all columns that make up for a unique constraint. The create table script generated by NHibernate is then
create table Person (
    Id UNIQUEIDENTIFIER not null, 
    FirstName NVARCHAR(50) not null, 
    LastName NVARCHAR(50) not null, 
    primary key (Id),
    unique (FirstName, LastName)
)

Indices

We might also want to tune our database schema and define some indices. Often we might search for a product by its name and thus the Name column might be a good candidate for an index. How can we do this. Well it's again very easy. Just add the attribute index to the right property tag in the product mapping file and provide a name for the index. That is

<property name="Name" not-null="true" length="50" index="idx_Product_Name"/>

now our create script will look like this (note the second last statement where the index is created)

create table Category (Id UNIQUEIDENTIFIER not null, ...)
create table Product (Id UNIQUEIDENTIFIER not null, ...)
create index idx_Product_Name on Product (Name)
alter table Product add constraint fk_Product_Category ...

Check Constraints

We can also define some check constraints on our columns in the database. Let's assume our product has a UnitsOnStock property which must be greater or equal than zero. To define this constraint on the database column we can define the mapping of UnitsOnStock as follows

<property name="UnitsOnStock" not-null="true" >
  <column name="UnitsOnStock" check="UnitsOnStock >= 0"/>
</property>

Note that there is no check attribute defined for the property tag. Thus we have to use the child tag column for this purpose. The create table script is then

create table Product (
    Id UNIQUEIDENTIFIER not null, 
    Name NVARCHAR(50) not null, 
    UnitsOnStock INT null check( UnitsOnStock >= 0) , 
    Category UNIQUEIDENTIFIER not null, 
    primary key (Id)
)

Update Schema

Once we have an existing database schema which we cannot re-create from scratch (because we might already have a first version of our application in production with productive data...) we need another technique. Fortunately NHibernate provides us the possibility to update an existing schema, that is NHibernate creates an update script which can the be applied to the database.

As usual we want to define a unit test for this situation. In the setup for the unit test I'll predefine a first version of my database schema. This time we need to have a database installed on the system (in our case SQL Server 2005) since this first version of the schema is generated in the database otherwise update schema will not work.

So let's have a look at the setup

[TestFixture]
public class UpdateSchema_Fixture
{
    private Configuration _cfg;
 
    public const string product_xml =
        "<?xml version='1.0' encoding='utf-8' ?>"+
        "<hibernate-mapping xmlns='urn:nhibernate-mapping-2.2'"+
        "                   namespace='Domain'"+
        "                   assembly='Domain'>"+
        "  <class name='Product'>"+
        "    <id name='Id'>"+
        "      <generator class='guid'/>"+
        "    </id>"+
        "    <property name='Name' not-null='true' length='20'/>" +
        "  </class>"+
        "</hibernate-mapping>";
    public const string category_xml = 
        "<?xml version='1.0' encoding='utf-8' ?>"+
        "<hibernate-mapping xmlns='urn:nhibernate-mapping-2.2'"+
        "                   namespace='Domain'"+
        "                   assembly='Domain'>"+
        "  <class name='Category'>"+
        "    <id name='Id'>"+
        "      <generator class='guid'/>"+
        "    </id>"+
        "  </class>"+
        "</hibernate-mapping>";
 
    [SetUp]
    public void SetupContext()
    {
        // Setup "old" database schema
        _cfg = new Configuration();
        _cfg.Configure();
        _cfg.AddXml(product_xml);
        _cfg.AddXml(category_xml);
        var export = new SchemaExport(_cfg);
        export.Execute(false, true, false, false);
    }
}

I define 2 strings containing the (first version of the) mapping files for the Category and the Product class. In the SetupContext method I create a configuration object and feed it with these two mapping XML fragments. I then export this schema to the database by creating an instance of the SchemaExport class and calling the Execute method.

Note that the Category mapping fragment does not contain a mapping for the Name column and the Product mapping fragment does not contain a mapping for the relation to the Category class as well as no definition of the UnitsInStock column.

Now I want to test the UpdateSchema class and thus implement the following test

[Test]
public void Update_an_existing_database_schema()
{
    _cfg = new Configuration();
    _cfg.Configure();
    _cfg.AddAssembly(Assembly.LoadFrom("DataLayer.dll"));
    var update = new SchemaUpdate(_cfg);
    update.Execute(true, false);
}

The update script generated by NHibernate is

alter table Category add Name NVARCHAR(20) unique
alter table Product add UnitsOnStock INT check(UnitsOnStock >= 0) 
alter table Product add Category UNIQUEIDENTIFIER
alter table Product add constraint 
fk_Product_Category foreign key (Category) references Category

As expected I only get alter statements for existing tables and create statements for the elements missing so far.

Code

You can find the code here. Download it with a SVN client like TortoiseSVN. It's a VS 2008 project.

Summary

When developing a application using DDD the database is often considered an "implementation detail". NHibernate provides us tools to auto-generate create and alter scripts for the database schema from the domain model. I have shown you, by using a simple domain model how to create a schema from scratch and how to alter a pre-existing database schema. I have also discussed various optimization techniques used when creating database schemas as there are unique constraints, indices and check constraints.

Enjoy

Blog Signature Gabriel .

Print | posted on Monday, April 28, 2008 9:52 AM

Comments on this post

# re: Create and Update Database Schema

Requesting Gravatar...
I am having problems getting NHibernate to create the PERSISTED columns:

CREATE TABLE [dbo].[Resource](
[Resource_Id] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](1000) NOT NULL,
[Short_Name] AS ([dbo].[GetNameWithFlat]([Name])) PERSISTED,
[Name_Checksum] AS (checksum([Name])) PERSISTED)

I tried using Formula, but it doesn't create the columns
Left by Dennis on May 21, 2008 10:03 PM

# re: Create and Update Database Schema

Requesting Gravatar...
@Dennis: what is "PERSISTED"? Which Database Product do you use?
Left by Gabriel Schenker on May 22, 2008 12:15 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Hi,
ich have a question to the parameter "unique-key".
What I really want is, that the name would be published too.
Like this:
create table Person (
Id UNIQUEIDENTIFIER not null,
FirstName NVARCHAR(50) not null,
LastName NVARCHAR(50) not null,
primary key (Id),
unique uk_Person_Name (FirstName, LastName)
)

Is this possible?
Thanks

Left by Sandra on Jun 24, 2008 2:44 AM

# re: Create and Update Database Schema

Requesting Gravatar...
@Sandra: as far as I know it is NOT possible!
Left by Gabriel Schenker on Jun 25, 2008 8:45 PM

# re: Create and Update Database Schema

Requesting Gravatar...
@ Gabriel Schenker
What a shame! So migrations of a existing database scheme to a new version becomes more difficult.
Left by Sandra on Jun 25, 2008 9:48 PM

# re: Create and Update Database Schema

Requesting Gravatar...
@Sandra: to migrate an existing schema (in production) to a new version I don't recommend using UpdateSchema but rather a tool like Red Gate's Sql Compare which can produce the necessary alter scripts.
Use UpdateSchema during developement to sync the db's of each developer...
Left by Gabriel Schenker on Jun 26, 2008 7:24 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Hi, Gabriel
Thank you for the great article.
I have a <many-to-many> assosiation. But the generate link table has no primary key defined. It just contains two foriegn keys. But there are nothing to make them a combined primary key. Did i miss something?
Left by leilei on Jul 13, 2008 1:34 AM

# re: Create and Update Database Schema

Requesting Gravatar...
@leilei: if you NEED a primary key in the association table you might have a look at "ID-BAG" (please consult the nhibernate doc, or if you have time to wait I'll post an article on this very topic soon)
Left by Gabriel Schenker on Jul 20, 2008 6:07 PM

# Generating constraint names

Requesting Gravatar...
@Gabriel, I too would like to see the constraint names in the generated scripts, as per Sandra's comment.

In my previous job we ran into a lot of trouble when we let SQL Server generate random names for constraints. When the time came to change them, we had problems running our script against mutiple copies of the database as each database had a different name for the constraint!

However I really like this approach as there is no need to keep your scripts under source control any more, just the mapping files.

I wonder if it might be possible for me to submit a patch for NHibernate which will provide this functionality. I have not contributed to OSS before but this could be my first effort.
Left by Ross Neilson on Aug 20, 2008 2:24 AM

# re: Create and Update Database Schema

Requesting Gravatar...
@Ross: every body is highly welcome to provide patches to NHibernate!
You still have some scripts to keep under source control though (when you migrate your productive database from one version to the next you'll probably want to use a tool like Redgate's Sql Compare to generate the alter script...)
Please have a look at:
http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/08/04/manage-sql-databases.aspx
Left by Gabriel Schenker on Aug 20, 2008 4:25 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Gabriel,

We did use Sql Compare, for just that task, it really is a very useful piece of software.

I have got the NHibernate source code downloaded to my PC at home so I will try to produce a patch over the weekend.
Left by Ross Neilson on Aug 20, 2008 8:00 PM

# re: Create and Update Database Schema

Requesting Gravatar...
become as agust
Left by sankaran namboodiripad on Jun 29, 2009 1:54 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Humm... interesting,

Thank you for the great article.
I have a assosiation. But the generate link table has no primary key defined. It just contains two foriegn keys. But there are nothing to make them a combined primary key. Did i miss something

Thanks
Left by software development company on Aug 20, 2009 2:30 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Thanks for that great article. Well, you wrote you wouldn't recommend to use UpdateSchema to migrate a database. You recommend an sql compare tool. Well, i use Fluent NHibernate, so i dont have hbm.xml-files. Can you explain, how you would update the database scheme without loosing all the data? Would be very helpfull

Nico
Left by Nico on Aug 31, 2009 9:07 AM

# re: Create and Update Database Schema

Requesting Gravatar...
i think this site is very enjoyable to read .So thanks for it.
Left by Bingo umsonst on Oct 30, 2009 7:58 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Thank you for the great article.
I have a assosiation. But the generate link table has no primary key defined. It just contains two foriegn keys. But there are nothing to make them a combined primary key. Did i miss something
Left by beds on Nov 04, 2009 4:58 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Where did you get the script generated by the SchemaUpdate from? SchemaExport has the option to output the database creation script but I can't see an equivalent option for SchemaUpdate. I'd really like to be able to capture the update script.
Left by Steve on Nov 05, 2009 12:15 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Whoops, forgot my manners. Thanks for this article. It has really helped me get started with NHibernate.
Left by Steve on Nov 05, 2009 12:21 PM

# Mr

Requesting Gravatar...
Crimnology, Social & Behavioral Science, Criminal justice online degree, Criminal justice accredited degree, Criminal justice online university, Criminal justice online School, Criminal justice degree, Criminal justice accredited university
Left by mevric on Nov 05, 2009 9:35 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Excellent post you have here.PageRank has also been used to rank spaces or streets to predict how many people (pedestrians or vehicles) come to the individual spaces or streets.Thanks for sharing this article.
Left by how to play bingo on Nov 05, 2009 9:49 PM

# re: Create and Update Database Schema

Requesting Gravatar...
SchemaExport has the option to output the database creation script but I can't see an equivalent option for SchemaUpdate. I'd really like to be able to capture the update script.
Left by Orkut Greetings on Nov 16, 2009 10:33 AM

# re: Create and Update Database Schema

Requesting Gravatar...
I have come to know something new about Schema update here.
Left by work at home blog on Nov 26, 2009 9:27 PM

# re: Create and Update Database Schema

Requesting Gravatar...
I always feel great when I find the blog useful for and it takes place in my collection. And, moreover, my colleagues are just fixed on it.
Left by students with autism on Dec 03, 2009 1:09 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Great blog.It is really informative article. Thank you for sharing your experience and teaching us.
Left by php chat software on Dec 21, 2009 2:47 AM

# re: Create and Update Database Schema

Requesting Gravatar...
great site
Left by silver on Dec 21, 2009 7:11 AM

# re: Create and Update Database Schema

Requesting Gravatar...
i like this!
Left by pandora jewelry on Dec 24, 2009 11:44 PM

# re: Create and Update Database Schema

Requesting Gravatar...
What a shame! So migrations of a existing database scheme to a new version becomes more difficult
Left by Cheap Web Hosting on Dec 26, 2009 2:40 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Well, it is just a way of your seeing people and their actions. I keep to another point of view.
Left by web designer los angeles on Dec 29, 2009 3:26 AM

# re: Create and Update Database Schema

Left by coffee machine on Dec 30, 2009 7:55 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Greetings to you. I would like to maintain two database. one for storing the data from the GUI and another database for reporting service(SSRS).Now i want to move the data from orginal database to reporting database. how can i handle, either through trigger or any other method.Need Advice.
Left by all new casinos on Dec 30, 2009 10:13 PM

# re: Create and Update Database Schema

Requesting Gravatar...
thx for useful post.
also thx for xomments. i took a lot
Left by free samples on Jan 05, 2010 1:58 AM

# health coverage

Requesting Gravatar...
When I try to install the schema, I get several errors:

CREATE TABLE psql:flightschoolschema:72: ERROR: syntax error at or near "birthdate" LINE 24: birthdate DATE,

^

psql:flightschoolschema:86: NOTICE: CREATE TABLE will create implicit sequence "images_id_seq" for serial column "images.id" psql:flightschoolschema:86: NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "images_pkey" for table "images" psql:flightschoolschema:86: ERROR: relation "users" does not exist psql:flightschoolschema:88: ERROR: relation "users" does not exist

.....
Left by health coverage on Jan 07, 2010 6:07 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Some hosts (Yahoo, for example) do not allow the ALTER command to be run from scripts (which may be the reason that install/update_to_latest.php failed in the first place). If you get permission errors, then you will need to run the queries manually using phpMyAdmin, a database management tool that is likely available in the host's control panel. It will hopefully have the necessary permissions.
Left by Web Design London on Jan 07, 2010 11:06 PM

# Web Site Development

Requesting Gravatar...
Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I'll be subscribing to your feed and I hope you post again soon
Left by Web Site Development on Jan 10, 2010 10:53 PM

# Web Design New Jersey

Requesting Gravatar...
This is a great blog, usually i don't post comments on blogs but I would like to say that this post really forced me to do so!
Left by Web Design on Jan 10, 2010 10:55 PM

# Web Design New Jersey

Requesting Gravatar...
i just wanna thank you for sharing your information and your site or blog this is simple but nice article I've ever seen i like it i learn something today.
Left by Web Design New Jersey on Jan 10, 2010 10:57 PM

# re: Create and Update Database Schema

Requesting Gravatar...
thanks - very useful.
you suggest purchasing Redgate's Sql Compare for formal upgrade scripts, but I would like to use update schema to generate a "template" upgrade script to tweak by hand.

Is there a way to programmatically export the script from schema update rather than apply it immediately. Create schema has overrides for exporting that update schema does not seem to have.

thanks again - a useful post
Left by idegreen on Jan 12, 2010 10:36 PM

# re: Create and Update Database Schema

Requesting Gravatar...
good news
Left by make money online on Jan 16, 2010 1:16 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Having revised your blog, it will take number one in my collection and will be read by my friends as well.
Left by flash developer on Jan 18, 2010 3:17 AM

# re: Create and Update Database Schema

Requesting Gravatar...
This is a really good read for me, Must admit that you are one of the best bloggers I ever saw.Thanks for posting this informative article.
Left by website marketing on Jan 18, 2010 5:02 AM

# Mr

Requesting Gravatar...
I will be passing this along to others that I know would want to read this.
Left by Cremation Urns on Jan 21, 2010 8:10 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Can anybody tell me how to Create and Update Database Schema in Oracle.
Left by Website Designers London on Jan 21, 2010 10:19 PM

# re: Create and Update Database Schema

Requesting Gravatar...
From time to time that falls out that you have no free time to finish the thesis project just about this good post. Some students do a big problem from that, just because some of them don’t know anything about thesis service, but we can give you suggests about the correct ways to detect the best buy dissertation service or how to buy thesis theme affordable.
Left by Miaad24 on Jan 25, 2010 2:01 AM

# re: Create and Update Database Schema

Requesting Gravatar...
ChronicDB seems like a new technology that can update schemas.

http://chronicdb.com
Left by Alonso on Jan 26, 2010 6:27 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Bookmarked!!!
Left by Glucosamine Chondroitin on Jan 26, 2010 4:27 PM

# re: Create and Update Database Schema

Requesting Gravatar...
What's more, a bracelet can also be equipped with different small pandora jewelry and even you can change it according to your mood at any time. Here are some meanings of pendant. Small Plane stands for traveling and adventure ; anchor, stability and hope; your baby's boots, having a lot of babies; small feeding pandora bracelets abundant food; Church means happiness and stability of marriage; dragonfly means riches; Eiffel Tower means travel and exploration; four-leaf clover means fortune; horseshoe means luck; Nest means a happy family; bride shows a happy bride in her coming pandora jewelleryship steering shows calming and confidence; pandora ukcoin pandora beadsshows rich marriage life. Wish bone, dreams being about to come true; pandora charm bracelets, love; one heart shot by an arrow, romantic love; purse, wealth; and heart-shaped lock, true love.
Left by pandora jewelry on Jan 28, 2010 3:48 PM

# re: Create and Update Database Schema

Requesting Gravatar...
i bookmarked it! thx!
Left by free samples without surveys on Jan 29, 2010 6:28 AM

# re: Create and Update Database Schema

Requesting Gravatar...
thx a lot
keep on sharing
Left by Live Hack on Jan 31, 2010 3:38 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Great I like it so much your this work.
Left by PVC window on Feb 03, 2010 10:24 PM

# re: Create and Update Database Schema

Requesting Gravatar...

Requesting Gravatar...
Great I like it so much your this work.
Left by kapadokya on Feb 05, 2010 10:21 AM

# re: Create and Update Database Schema

Requesting Gravatar...
It is a nice sharing, we like it.
Left by registry cleaner reviews on Feb 05, 2010 10:26 PM

# Thanks

Requesting Gravatar...
Thanks for good information.
Left by araç sorgulama on Feb 06, 2010 9:16 AM

# Awesome

Requesting Gravatar...
Blogging is now becoming one of the new phenomenal ways to make money online. It is no surprise because you can work on your own hours, if you call it working that is.
Left by make money online on Feb 06, 2010 9:52 AM

# re: Create and Update Database Schema

Left by ugg boot on Feb 08, 2010 7:00 PM

# re: Create and Update Database Schema

Requesting Gravatar...
It is a nice sharing, we like it. I will forward this article to him. Pretty sure he will have a good read. Thanks for sharing!
Online Universities | Bachelors degrees | doctorate degree | Online Architecture degree | Project Management degree
Left by siomy on Feb 09, 2010 9:50 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Very informative. Thank you for sharing it I am so impressed w/evernote so far. really pro stuff. thx folks
Left by online scheduler on Feb 10, 2010 9:56 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Great article. Many thanks.
Left by Software Developers on Feb 10, 2010 10:38 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Thanks for sharing how to update database schema,it helped me a lot!
Left by antivirus on Feb 12, 2010 3:32 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Great information. I was looking for it from many days.
Left by Seo Services on Feb 12, 2010 9:06 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Nicely written blog.
Left by Seo Company on Feb 12, 2010 9:08 PM

# re: Create and Update Database Schema

Requesting Gravatar...
If you’re frustrated and do not know the best way to accomplish the essay writing, you would be able to buy academic paper from the advanced writing service. This can really save your free time and money.
Left by Megan19he on Feb 13, 2010 1:54 AM

# re: Create and Update Database Schema

Requesting Gravatar...
The release referring to this topic is great! Thus scholars not have to finish the dissertation writing or just essay thesis by their own efforts, they can take your assistance.
Left by XiKristin on Feb 14, 2010 2:55 PM

# re: Create and Update Database Schema

Requesting Gravatar...
To be successful means to have the high academic grade and for that, people must present the good quality communication and media essays. But is that real to create it without a support of the superior writing services? Yes, that is realizable, but it can be more easier to buy do my essay assignment related to this post in Internet.
Left by ChloecF on Feb 15, 2010 5:49 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Thanks for this posting
Left by Online Sweepstakes on Feb 16, 2010 8:23 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Lots of years we wanted to order hot thesis titles about this post in the dissertation service. Can you please advice some thesis service? Thanks a lot.
Left by nL20Joan on Feb 18, 2010 4:34 AM

# re: Create and Update Database Schema

Requesting Gravatar...
I like your IDea about this topic...
Left by fredz on Feb 18, 2010 7:55 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Here are extraordinary suggestions about the correct way to get the academic grade. Thus, you should get know the idea connected with this post and finish the good enough middle east essay. The easier way is to find the trustworthy custom essay papers writing service and just buy college essays online. Hope that would help people.
Left by CP18Amy on Feb 18, 2010 9:07 AM

# re: Create and Update Database Schema

Left by gucci shoes on Feb 21, 2010 2:14 PM

# re: Create and Update Database Schema

Left by cheap picture frames on Feb 22, 2010 6:04 PM

# re: Create and Update Database Schema

Left by custom essay writing on Feb 22, 2010 10:02 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Thanks for sharing such precious information and I’ll get some of my friends to read your blog for sure.
Left by web design orange county on Feb 23, 2010 1:28 AM

# aion kinah

Requesting Gravatar...
Do you knowaion kinah?if you play the online game,you will knowcheap aion kinahis the game gold.you can come here and spend a little money to boughtbuy aion kinah.Quickly come here.
Left by aion kinah on Feb 24, 2010 1:27 PM

# discount ed hardy women long sleeve shirts sales online

Requesting Gravatar...
YS0225A5 If you think you are beaten, you are! If you nk you dare noted hardy clothing, you don't! If you want to win but think you can't, It's almost a cinch you won't ed hardy hoodies! If you think you'll lose,you're lost! For out of the world we find.Success begins with a fellow's will,It's all in a ed hardy shirts state of mind! Life's battles don't always go.To the stronger and faster ed hardy coats man,But sooner or later the man who wins,Is the man who thinks he can! When You Belive http://www.edfashionclothes.com/,Many night we've prayed!With no proof anyone could hear!In our heart a hopeful moncler online store song,we barely understood!Now we are not afraid !Although we know there's much to fear!We were moving the moncler jackets mountian long,Before we knew we could!There can be miracles!
Left by discount mens moncler down coat on Feb 24, 2010 9:56 PM

# discount air jordan shoes 25 sales online

Requesting Gravatar...
YS0225A6 When you belive,Though hope is frail.It's hard to kill,Who knows what cheap prada shoes miracles,You can achieve,When you belive! Somehow you will,

You will when you belive new nike air max!And in this time of fear, When prayer so often proves in vain, Hope seems like the http://www.nikeaf1jordanshoes.com/summer birds. Too swiftly flown away, And now I am standing wholesale gucci shoes here.My heart's so full I can't explain.Seeking faith and speaking women's nike shox words I never thought I'd say, They don't always happen when you ask authentic air jordan shoes.And it's easy to give in to your fear. But when you're blinded by your pa
Left by discount mens moncler down coat on Feb 24, 2010 10:04 PM

# discount Ugg Broome Boots in chestnut leather online sales

Requesting Gravatar...
YS0225A8 Before there was no reason in the world,As now there is!The moncler jackets course of water was my only course,My repetitions oceans' sough and swell ugg adirondack boots!My seasons pleasurable,Before there was no reason in the world,As now there is ugg broome boots!To measure time from sleep I rose to sleep,To measure space I pastured on surprise http://www.edhardy-buy.com/,O meadows of resemblances,Ias the grove on whose mosaic floors,The moncler online seeds of otherwise were spent,My gods had many arms,I was the Caesar of unmarshaled grass ugg boots!Faustus in the branches,My first ambitions were my sorrows long!Before there was no reason in the world,As now there is!
Left by discount womens moncler jacket on Feb 24, 2010 11:00 PM

# discount air jordan shoes 23 sales online

Requesting Gravatar...
YS0225A7 when the sun hugs the moon, the sky clses her eyes.when the sun hug the moon the sea quiet her jordans shoes.when the sun hugs the moon,the forest stops her susurrus.when the sun hugs the nike sb dunk high,the desert hodlds her breathe.Thousands of years's waiting is only for this nike acg shoes moment.Never be disappointed.Nver give up.It hax been sucha long time.At nike air max 2003 this momentmeet each other in course of time.Do not cry,Moon.I guard you forever.Cause you are in my life,everyting has its meaning.The fascinating Diamond Ring,is the ring i give you,May it give you warm http://www.nikejordanshoes2sell.com/ threduce your tears.Do not cry,Sun,I will be there with you forever/Meeting you has given me precious memeory.The resplendent Baily Beads.is the gem i give you .May i give you cheap air jordan 22 shoes strength, shine in your morning.Meet soon and part soon.It makes peop;e retrospect in spite of lasting a few minutes.A long times waiting is coming.Don't know when the next meeting is .When the sun hugs the Moon. the Moon hugs the sun as well Hugging tightly,regian the lost nicety.
Left by discount nike air max shoes sale on Feb 24, 2010 11:04 PM

# re: Create and Update Database Schema

Requesting Gravatar...
thx
will bookmark ur sire
Left by вишиті сорочки on Feb 25, 2010 12:20 AM

# re: Create and Update Database Schema

Requesting Gravatar...

Hi there, I found your blog on Google while seeking for first aid for a heart attack and your post looks very interesting for me.
Left by auto insurance ontario on Feb 25, 2010 2:41 PM

# discount christian louboutin sandals online sales

Requesting Gravatar...
YS0226A1 That your heart has been broken,Hear the words,I'm here, m child,;And know your christian louboutin uk angel has spoken.For even in the darkest hour,When all of discount louboutin shoes hope seems gone,They'll give you strength to live your life,And desire to go on.And if your faith in Heaven, Should ever fade away,They'll help renew your christian louboutin boots spirit, And help you find your way.Even though you're ever filled with doubt, About the christian louboutin pumps life you live,Know that they are there to give you All that they can give.For you see, the Father sent them,Because to Him, you mean so much,That He sent them just for you,my louboutin sale friend,And your life, they will touch.They will always be here,They will never leave your http://www.christianlouboutinshoestore.com/ side;And upon their strength and guidance,You always may rely.Take comfort in their guidance, Draw strength from up above,And know that their sweet presence,Is God's precious gift of love.
Left by cheap christian louboutin shoes on Feb 25, 2010 3:35 PM

# discount women's ugg elsey boots 5596 sales online

Requesting Gravatar...
YS0226A2 If I were a boy again, I would practice perseverance more often, and ner give up a thing because it was ugg australia boots or inconvenient. If we want light, we must conquer darkness. Perseverance can sometimes equal genius cheap ugg boots in its results. “There are only two creatures,” syas a proverb, “who can surmount the pyramids—the eagle and the snail.” If I were a uggs sale boy again, I would school myself into a habit of http://www.topsnowboots.com/ attention; I would let nothing come between me and the subject in hand. I would remember that a good skater never tries to skate in two ugg cardy boots directions at once. The habit of attention becomes part of our life, if we begain early enough. I often hear cheap gucci shoes grown up people say “ I could not fix my attention on the sermon or ugg coquette book, although I wished to do so” , and the reason is, the habit was not formed in youth.
Left by cheap ugg upside boots 5163 on Feb 25, 2010 3:41 PM

# discount Women's ugg adirondack boots II sales online

Requesting Gravatar...
YS0226A3 Hold fast to dreams.For if dreams die. Life is a broken-winged bid,That ugg australia boots can never fly.Hold fast to dreams. For when dreams go,Life is a barren ugg tall boots field, Frozen only with snow !You never know until you try; And you never try unless you really try ugg cardy boot. You give it your best shot; You do the best you can. And if you have done everything http://www.uggsnowbootsbest.com/! In your power,and still,The truth of the uggs argyle knit matter is! That you haven\'t failed at all.When you reach for your dreams,No matter what ugg boots they may be,You grow from the reaching;You learn from the trying;You win from the doing.
Left by cheap ugg classic cardy boots on Feb 25, 2010 3:48 PM

# discount reebok nfl jerseys online sales

Requesting Gravatar...
YS0226A4 A true friend is someone who reaches or your hand and touches your cheap hockey jerseys heart.There's always going to be people that hurt you,so what you have to do is keep on trusting nfl jerseys and just be more careful about who sport jerseys you trust next time around.Make youself a better person and know who you are discount nba jerseys before you try and know someone else and expect them to know you mlb jerseys on sale.Remember:Whatever happens,happens for a reason.How many people actually have 8 true http://www.nfljerseymlb.com/friends Hardly anyone I know.But some of us have all right friends and good friends.
Left by cheap adiads nba jerseys sale on Feb 25, 2010 3:50 PM

# discount ugg sienna miller boots 5818 sales online

Requesting Gravatar...
YS0226A9 Unwearied still, lover by lover,They paddle in the cold,Companable ugg australia shoes streams or climb the air;Their hearts have not grown old;ugg coquette Passion or conquest, wander where they will, Attend upon them still ugg adirondack boots. But now they drift on the still water, Mysterious, beautiful; Among what http://www.uggboots4buy.com/ rushes will they build, By what lake’s edge or pool,Delight men’s mbt shoes eyes when I awake some day.To find they have flown uggs classic cardy away?Before there was no reason in the world As now there is I was the bough bent easy by a ugg boots bird I was the vague blue-grazing flock The sleeping and invisible!
Left by cheap women's ugg elsey boots on Feb 25, 2010 3:57 PM

# discount mens air jordan shoes 13 online sales

Requesting Gravatar...
YS0226A10 When you are old and gray and full of slep,And nodding by the moncler jackets fire, take down this book! And slowly read jordans sheoes , and dream of the soft look,Your eyes had once, and of their cheap nike shoes shadows deep;How many loved your moments of glad grace,And loved your beauty with nike air force 1 love false or true; But one man loved the pilgrim soul in you,And http://www.onestop-onlineshopping.com/ loved the sorrows of your changing face; And bending down beside the designer clothing glowing bars,Murmur, a little sadly, how love fled.And paced upon the mountains overhead discount air jordan shoes,And hid his face amid a crowd of stars.
Left by cheap nike air max 90 online on Feb 25, 2010 3:59 PM

# discount louis vuitton damier canvas handbags online sales

Requesting Gravatar...
YS0226A11 Surrounding you are angels,They are there t guide your path.If designer purses weaesskn overcomes you,They'll give you strength if you will ask. They are your protection.When discount designer bags on sale life seems too hard to bear,And though you feel alone at times, The louis vuitton 2009 angels ... they are there.Their faces may be hidden And their voices you might not hear,But they are ALWAYS with you,Through your laughter or your tears.http://www.handbags4buy.com/ They'll walk along beside you,They'll guide your leather handbags steps along the way, They'll comfort you and hold you,Protect you dior handbags night and day.They'll hold to your hand tightly ,They'll not ever let it go,And they'll gently lead you cheap designer handbagsforward,Taking each step very slow.For even as you slumber,They watch closely over you;They are there beside you. In each and every thing you do.
Left by cheap nike air max 90 online on Feb 25, 2010 4:06 PM

# re: Create and Update Database Schema

Requesting Gravatar...

wedding dresses,wedding gowns,bride dresses,bridesmaids dresses,evening dresses,bridal gowns,flower girl dresses
Wedding Gowns
Formal Gowns
Cocktail Gowns
Find the wedding dress designer and wedding dress that's right for you! Browse dresses from
Bridesmaid Gowns
Evening Gowns
View our selection of exquisite, handmade gowns and dresses for your wedding
Wedding Dresses, Wedding Shoes and Wedding Accessories from wedding shop, the UK's finest collection of designer wedding dresses.
Use the wedding dress and
cheap wedding
wedding dresses
wedding shop
w
Left by sbb on Feb 27, 2010 10:11 PM

# re: Create and Update Database Schema

Requesting Gravatar...

wedding dresses,wedding gowns,bride dresses,bridesmaids dresses,evening dresses,bridal gowns,flower girl dresses
Wedding Gowns
Formal Gowns
Cocktail Gowns
Find the wedding dress designer and wedding dress that's right for you! Browse dresses from
Bridesmaid Gowns
Evening Gowns
View our selection of exquisite, handmade gowns and dresses for your wedding
Wedding Dresses, Wedding Shoes and Wedding Accessories from wedding shop, the UK's finest collection of designer wedding dresses.
Use the wedding dress and
cheap wedding
wedding dresses
wedding shop


asss
Left by sbb on Mar 02, 2010 8:01 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Thank you for sharing.In the world, abercrombie and fitch is loved by young and old, women and men, adults and kids by its abercrombie store ,abercrombie sale for abercrombie and fitch men or abercrombie and fitch women . And abercrombie & Fitch is the most bought by many people in America, whether it'sabercrombie and fitch clothing or accessories. It has been deeply loved by many young people.
Left by letty on Mar 03, 2010 6:05 PM

# jewellery

Requesting Gravatar...
links of london jewellery also manufacture links of london handsome combinations of leather and silver harvest which are some of it’s in-request yield. Links of London is one of the chief brands in the United Kingdom. It lately won the prestigious Best Jewellery Brand Award at the Retail Jeweller UK links of london sale Awards 2006. It lays a lot of weight on producing jewellery featuring newer, exceptional designs. Annoushka?S mother requested her to links of london jewellery bestow a couple of fish cufflinks which she wanted to gift to her loyal restaurant clients. This led Annoushka to design and manufacture a pair of fish cufflinks made of sterling silver for a twosome of fish cufflinks - uncanny but exact. Company resulted from a plain request for her companion, John Ayton, founded the jewellery kind, Links of London jewellery has a very trendy jewellery includes Links of London Sweetie Bracelet and Disco Diva Charm. links of london Pendants . A links of london sale regional restaurant owner commissioned the United Kingdom. It offers a diversity of men?S and women?S jewellery in genuine silver and planned a full collection. In 1990, Annoushka Ducas and her mother.Online shopping sources: relations of london Today Links of London is a well established and general jewellery marker in the UK, Hong Kong, USA and Canada. It also produces contemporary classic designs. Some of its very sole report to its launch. Harvey Nichols, the full London transform links of london charms storeroom, loved the pattern and 18 carat gold. Links of London Charms and links of london valentine’s bracelet are ideally planned as gift things. Most of the Links of London crop are designed and preferred by Annoushka Ducas. Support by UK shoppingLinks of London was natural and nowadays we have mature internationally with supplies in the manufacture of a twosome of genuine silver cufflinks, as a gift for their loyal restaurant clients.
Left by liubaiying on Mar 05, 2010 6:37 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Your shared knowledge will surely help the newbies in their field of expertise. Care for an update.
Left by mothers day gifts on Mar 05, 2010 9:01 PM

# re: Create and Update Database Schema

Requesting Gravatar...
whats up with all this code? isnt there some plugin for this to make the task easier?

-Andy from best blu ray ripper and best blu ray maker
Left by Blu Ray Ripper on Mar 06, 2010 2:39 AM

# re: Create and Update Database Schema

Requesting Gravatar...
like your Idea about this topic.
Left by ucvhost on Mar 06, 2010 2:45 AM

# re: Create and Update Database Schema

Left by Increase Vertical Jump on Mar 06, 2010 11:13 AM

# re: Create and Update Database Schema

Requesting Gravatar...
Thanks for posting as it really helps me forget about my problems.
Left by Canadian pharmacy Cialis on Mar 07, 2010 12:22 PM

# ugg boots

Requesting Gravatar...
they are very good and useful!!!
ugg outlet
cheap uggs
nike shoes
wholesale watches g
Left by ugg boots on Mar 07, 2010 5:25 PM

# re: Create and Update Database Schema

Requesting Gravatar...
It’s hard to find knowledgeable people on this topic, but you sound like you know what you’re talking about! Thanks Don’t stop writing, you’ve given me lots of good info! Youtube to MP4 Converter
Convert PDF to image
23
Left by powerpoint on Mar 08, 2010 2:18 PM

# re: Create and Update Database Schema

Requesting Gravatar...
My hair is just over my ears. I like two kinds of hair styles most. Firstly, use the ghd straighteners to make

the hair in nature and bouffant style. Divide the hair into several portions. Use ghd pink to roll them inside

towards your ears. Several minutes later, the hair will roll neatly inside in the branches. Secondly, the active and energetic style with the roll of the

direction in the opposite direction can be made similarly with the formal procedure. All you need to do is to roll the hair outward instead of inward

with ghd mk5.
It is so simple that you can have your own charming short hair style with GHD straightener uk. Besides the new hair styles,ghd straighteners can help you with the puffy hair after you get up which is the annoying thing for many short hair

girls.
Left by ghd straighteners on Mar 09, 2010 3:31 PM

# re: Create and Update Database Schema

Requesting Gravatar...
Cheap A&F Made Me Fashionable too
abercrombieOuterwear
abercrombie and fitchabercrombie henleys crew
abercrombie & fitchhollister uk
abercrombie saleabercrombie womens
abercrombie fitchabercrombie mens
A&F
Left by qq on Mar 10, 2010 12:40 PM

# re: Create and Update Database Schema

Requesting Gravatar...
I was very pleased to find this site.I wanted to thank you for this great read!! I definitely enjoying every little bit of it and I have you bookmarked to check out new stuff you post.
cheap vps | cheap hosting Many many thanks.
Left by ucvhost on Mar 10, 2010 11:40 PM

Your comment:

 (will show your gravatar)
 
Please add 3 and 2 and type the answer here: