0

我现在为基于 MSSQL Server 的系统编写自动化程序,使用 Ruby 1.9.3 和 ActiveRecord 3.1.6,没有 Rails。

表具有非标准 id(stk_id, urb_id,而不是id),有些表也没有主键。

在我添加列id并将其设置为主键之前,我的程序运行非常缓慢。我等了将近 3 分钟,程序在 9000 条记录的表中进行了两次选择操作和一些小处理。但是当我添加列id并将其设置为主键时,这些操作在不到 10 秒内完成。

我在删除操作中发现的另一个问题:如果没有表中的主键,它根本不起作用。尝试在没有主键的情况下删除时出错:

nil:NilClass 的未定义方法“to_sym”

我无法修改生产数据库的表结构。也许有人知道如何在不添加id列和设置主键的情况下解决这个问题?

4

3 回答 3

1

在没有主键的每个表上创建索引视图。可以根据需要应用唯一聚集索引以及其他索引。在视图中包含单个表应该可以防止您违反索引视图要求/禁止的许多条件。

于 2012-06-20T22:26:24.240 回答
1

我建议考虑使用Sequel而不是 ActiveRecord。它对 ActiveRecord 之类的数据库模式并不固执己见,并且可能更容易与您无法修改的数据库模式一起使用。

于 2012-06-20T23:26:38.073 回答
1

备注:没有主键的数据库很糟糕!

http://www.helium.com/items/1539899-why-a-relational-database-needs-a-primary-key

Using nonstandard keys is no problem, just use self.primary_key = "stk_id"

You may also use composite_primary_keys: https://github.com/drnic/composite_primary_keys

于 2012-06-21T13:15:15.240 回答