看来org.hibernate.cfg.Configuration对象可以通过调用validateSchema方法以编程方式执行验证.但是,此方法需要dialect和databaseMetadata对象.我正在使用Spring,我可以从spring上下文中获取AnnotationSessionFactoryBean对象.到目前为止,我有以下代码:
AnnotationSessionFactoryBean factory = null;
factory = (AnnotationSessionFactoryBean) context.getBean("AnnotationSessionFactory");
Configuration configuration = factory.getConfiguration();
//the following line does not work, ConnectionHelper hierarchy is not visible outside the package
ConnectionHelper connectionHelper =
new ManagedConnectionProviderConnectionHelper(factory.getHibernateProperties());
Dialect dialect = Dialect.getDialect(factory.getHibernateProperties());
Connection connection = null;
DatabaseMetadata databaseMetadata = null;
try {
databaseMetadata = new DatabaseMetadata(connection, dialect);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
configuration.validateSchema(dialect, databaseMetadata);
Run Code Online (Sandbox Code Playgroud)
我是在正确的轨道上吗?ConnectionHelper层次结构在包外不可见,因此我无法以这种方式获取连接对象,以构建databaseMetadata.我该如何实现呢?
编辑:我想我已经取得了一些进展.有一个SchemaValidator类.代码现在看起来像这样:
AnnotationSessionFactoryBean factory = context.getBean("&AnnotationSessionFactory");
Configuration configuration = factory.getConfiguration();
SchemaValidator validator = new SchemaValidator(configuration); …Run Code Online (Sandbox Code Playgroud) 好的,所以我被骗了为我工作的Oracle数据库做一些数据库设计.问题是,我不是一个数据库人:-).我目前正在使用Rational Application Developer(RAD)来对我的数据库模式进行建模.我理想的做法是生成一系列Word文档,其中包含来自我的数据库模式的信息(主要是表/列信息,约束和触发器作为Word文档中的表).
我似乎无法用RAD找到任何方法,所以我想知道是否有人知道可以采用SQL DDL脚本文件(包含架构的CREATE命令)的工具,并生成Word类型的报告?
任何指针都非常感激.
谢谢...
我正在寻找有关以下内容的信息:
将我的开发者数据库的模式更新到生产数据库的最佳实践是什么,或者甚至更简洁地进行数据库模式更改.
生产数据库是两个不同的ASP.NET网站的后端.
我们的架构更改过程非常强大,每个"迁移"实际上都是包含架构更改的.cs文件.然后,我们将使用ADO.NET对数据库应用模式更改.
我的问题更多的是关于数据库的连接性.
我应该停止访问数据库的两个网站吗?我想我应该.我应该将数据库置于单用户模式.看起来我应该这样,但我对此并不完全有信心.
我能错过什么?在涉及数据库架构更改之前,有什么东西在手中咬了你.
sql-server asp.net database-migration sql-server-2008 database-schema
在构建时,我想自动创建一个sql脚本来生成一个新的数据库.我打算使用这个脚本,所以我可以创建一个我可以与生产数据库进行比较的主数据库,以生成一个迁移脚本.我不能使用我的开发DB,因为我在开发过程中设置了使用SqlCE.
不幸的是,我似乎无法在CodeFirst API中找到任何生成sql脚本的内容.我确信这是可能的,因为模型优先.我看到API调用我DbContext初始化数据库,但没有任何东西让我自己实际初始化它的脚本.
我也希望在构建时生成此脚本.发生这种情况的最佳方法是什么?我正在考虑创建一个T4模板,并使用Chirpy让它在构建时运行它,但我想知道是否有更简单的解决方案.
我正在尝试找到有关MySQL,PostgreSQL,SQLite等开源数据库的正确RDBMS SQL查询的信息.他们是否有任何预组装列表或者我只需要梳理每个数据库引擎的文档(在某些情况下猜测正确的实现? ALTER TABLE vs CREATE INDEX)
例如,到目前为止,我有MySQL的这个(部分)列表:
CREATE TABLE `%s` (...);
DROP TABLE IF EXISTS `%s` %s;
ALTER TABLE `%s` RENAME TO `%s`;
ALTER TABLE `%s` ADD COLUMN %s;
ALTER TABLE `%s` DROP COLUMN `%s` %s;
ALTER TABLE `%s` RENAME COLUMN `%s` to `%s`;
ALTER TABLE `%s` ADD CONSTRAINT `%s` FOREIGN KEY (`%s`) REFERENCES `%s` (`%s`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `%s` ADD CONSTRAINT `%s` UNIQUE (`%s`);
ALTER TABLE `%s` DROP CONSTRAINT …Run Code Online (Sandbox Code Playgroud) mysql postgresql relational-database ansi-92 database-schema
我有一个数据库表,维护一些信息,并需要保留订单.基本上如果我列出了元素1到5,并且我想添加一个新元素,那么它可以插入到现有行中的任何位置,可以是最后一个,5之后,1之前的开始或中间的某个位置,例如3之后有没有办法使用MySQL INSERT语句并指定我们应该在哪一行插入索引?
我认为不是.所以我的策略是创建另一个列'order_number',它基本上记录了元素的顺序.例如,如果记录表具有主键(record_id)和并排列出的order_number,它将如下所示:
record_id order_number
1 1
2 2
3 3
4 4
5 5
Run Code Online (Sandbox Code Playgroud)
要在第3行之后向此行添加新元素,生成的结束表将如下所示:
record_id order_number
1 1
2 2
3 3
**6** **4** <------ added row
4 **5** <-- changed order_number
5 **6** <-- changed order_number
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我可以通过简单地选择我想要的数据并提供Order By order_number asc子句来清楚地实现我想要的顺序.
但是,正如您所看到的,要做一个简单的Insert,它需要我更新它之后出现的每个其他行的order_number.该表预计至少具有大量的行(大小为100,000),并且在每次单个插入操作时简单地更新每隔一行(因此锁定表)根本不可行.
在这种情况下,什么是更好的推荐策略?
Postgres 9.0支持排除约束,这类似于一般的唯一约束(http://www.postgresql.org/docs/9.0/static/sql-createtable.html#SQL-CREATETABLE-EXCLUDE).
我认为这可能是解决这个问题的好方法,但我无法弄清楚如何正确使用排除约束.
这是问题所在:我有一个这样的表:
CREATE TABLE emails (
id integer NOT NULL,
email character varying(255),
"primary" boolean DEFAULT false,
user_id integer,
);
Run Code Online (Sandbox Code Playgroud)
我想确保每个独特的只有一行user_id有"primary"等于真.我尝试使用这样的排除约束:
ALTER TABLE emails ADD CONSTRAINT one_primary_email_per_user EXCLUDE USING gist (user_id WITH =, "primary" WITH &);
Run Code Online (Sandbox Code Playgroud)
Postgres拒绝了:
ERROR: data type boolean has no default operator class for access method "gist"
HINT: You must specify an operator class for the index or define a default operator class for the data type.
Run Code Online (Sandbox Code Playgroud)
我再次尝试将布尔列转换为bit …
很抱歉以假名发布,但由于公司限制我必须保持匿名,并且通常是为了保护无辜者.
我已经做了大约18年的专业开发人员,虽然我不是一名DBA,但多年来我一直与他们密切合作,并且已经形成了我认为对数据库实践有什么不好的感觉.我刚刚加入了一个公司,两个开发人员负责数据库模式,我发现他们非常反对使用外键约束.
他们最好的推理是:(1)由于涉及额外的数据设置,它使单元测试存储过程更加困难;(2)外键可能因顺序重要而引发错误.他们实际上更喜欢孤立的数据,而不是停止应用程序.
这对我来说似乎是不好的做法,但他们在他们的位置上坚定不移.我们提出了外键在数据完整性,查询性能,生成数据库图表等方面提供的优势,但无济于事.
我在这里看不到什么?有什么建议?
database-design foreign-keys database-schema sql-server-2012
具有能力来计算UTC时间戳作为一列的默认值是最流行的数据库解决方案的一个方便的功能。Google Cloud Spanner是否支持此功能?如果不是,这是一个可能的路线图项目?
database database-schema google-cloud-platform google-cloud-spanner
我正在尝试为我的项目管理软件绘制一个ER图,描述以下内容。它包含以下实体:
和:
一个项目可以分为任务。(任务可以由管理员用户创建,管理员用户可以将这些任务分配给选定的项目。这里仅将任务分配给项目,而没有将员工分配给项目。)
可以将员工分配到项目。
(可以将员工分配到项目。这里仅将员工分配到项目,而没有分配到项目任务。)
对于选定项目的选定任务,我们可以从资源池中分配员工-在2中分配给该项目的员工。(这一次,我们必须指定项目,任务和员工;所有3个选择都是必需的。)
上面1、2和3的输入过程可以在系统的单独页面中完成。您可以先选择其中的任何一个。
对于以上关系,我创建了此ERD:
考虑
是否需要两个单独的关系(如ER图中的关系,关系1和关系2)?
要么
我们还可以仅使用项目,员工和任务之间的关系3,而不使用关系3吗?
database database-design entity-relationship relational-database database-schema
database-schema ×10
database ×2
mysql ×2
postgresql ×2
sql ×2
ansi-92 ×1
asp.net ×1
c# ×1
foreign-keys ×1
hibernate ×1
oracle ×1
schema ×1
spring ×1
sql-server ×1