Адаптивная база данных - PullRequest
1 голос
/ 28 августа 2008

Существуют ли какие-либо инструменты быстрого прототипирования базы данных, которые не требуют, чтобы я объявлял схему базы данных, а скорее создавал ее на основе того, как я использую свои сущности.

Например, предполагая пустую базу данных (псевдокод):

user1 = new User()  // Creates the user table with a single id column
user1.firstName = "Allain" // alters the table to have a firstName column as varchar(255)

user2 = new User()  // Reuses the table
user2.firstName = "Bob"
user2.lastName = "Loblaw"  // Alters the table to have a last name column

Так как при динамическом создании схемы можно сделать логические предположения, и вы всегда можете переопределить ее выбор, используя инструменты БД, чтобы настроить ее позже.

Кроме того, вы можете сгенерировать свою схему, протестировав ее таким образом.

И, очевидно, это только для прототипирования.

Есть что-нибудь подобное?

Ответы [ 6 ]

2 голосов
/ 28 августа 2008

Механизм приложений Google работает следующим образом. При загрузке инструментария вы получаете локальную копию ядра базы данных для тестирования.

1 голос
/ 09 сентября 2008

Я согласен с подходом NHibernate и автоматической генерацией базы данных. Но, если вы хотите избежать написания файла конфигурации и придерживаться кода, используйте Castle's ActiveRecord . Вы объявляете «схему» непосредственно в классе с помощью атрибутов.

[ActiveRecord]
public class User : ActiveRecordBase<User>
{
     [PrimaryKey]
     public Int32 UserId { get; set; }

     [Property]
     public String FirstName { get; set; }
}

Существует множество ограничений, которые вы можете применить (проверка, границы и т. Д.), И вы можете объявить отношения между различными классами моделей данных. Большинство из этих параметров являются параметрами, добавляемыми к атрибутам. Это довольно просто.

Итак, вы работаете с кодом. Объявление использования в коде. И когда вы закончите, позвольте ActiveRecord создать базу данных .

ActiveRecordStarter.Initialize();
ActiveRecordStarter.CreateSchema();
1 голос
/ 28 августа 2008

Grails использует Hibernate для сохранения объектов домена и производит поведение, аналогичное описанному вами. Чтобы изменить схему, вы просто изменяете домен, в этом простом случае файл называется User.groovy.

class User {

    String userName
    String firstName
    String lastName
    Date dateCreated
    Date lastUpdated

    static constraints = {
        userName(blank: false, unique: true)
        firstName(blank: false)
        lastName(blank: false)
    }

    String toString() {"$lastName, $firstName"}

}

Сохранение файла изменяет схему автоматически. Аналогично, если вы используете строительные леса, они обновляются. Процесс прототипа запускает приложение, просматривает страницу в браузере, изменяет домен, обновляет браузер и видит изменения.

0 голосов
/ 09 сентября 2008

Вы можете использовать объектную базу данных.

0 голосов
/ 31 августа 2008

Вам нужна схема, но она сгенерирована, или вы действительно хотите НЕТ схемы ?

Для первого я бы выбрал nhibernate, как сказал @ tom-carter. Пусть он сгенерирует для вас вашу схему, и у вас все хорошо (по крайней мере, пока вы не развернете свое приложение, а затем посмотрите на что-то вроде Tarantino и RedGate SQL Diff или как там оно вызывается для генерации скриптов обновления)

Если вы хотите, чтобы последнее .... Google App Engine делает это, как я обнаружил сегодня днем, и это очень приятно. Если вы хотите придерживаться кода, находящегося под вашим контролем, я бы посоветовал взглянуть на CouchDB, хотя это немного предварительная работа по настройке. Но как только вы это сделаете, это будет 100% база данных без схемы. Ну, у вас есть ID и версия, но это все - остальное зависит от вас. http://incubator.apache.org/couchdb/

Но по звукам этого (N) гибернация подойдет лучше всего, но я могу ошибаться.

0 голосов
/ 28 августа 2008

Может не совсем отвечать на ваш общий вопрос, но если вы использовали (N) Hibernate , то вы можете автоматически сгенерировать схему базы данных из файлов сопоставления hbm.

Это не сделано непосредственно из вашего кода, как вы, кажется, хотите, но генерация схемы Hibernate, кажется, хорошо работает для нас

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...