I think the answer to this question depends on the technologies available for the language you are going to use.
I am very successful using ORM (NHibernate), so naturally I can recommend option 1.
There are other options you might want to accept:
- If you use .NET, you can use attributes for your class properties to serve either as a mapping inside the class, or as data that might be mirrored
- If you use .NET, Fluent NHibernate will make it easier to display types in your code.
- , , , , , . CRUD-, , .