2

我的任务是为我目前的工作开发一个新的零售电子商务店面,我正在考虑使用 RoR 来解决它 A) 用我有限的 Rails 知识构建一个“真实”项目,以及 B) 为管理层提供快速周转和反馈(他们希望尽快完成这项工作,而且他们的截止日期相当不切实际——我说的是几周后才能从无到有工作模式,这样他们就可以开始使用 SEO/SEM 进行营销,我不骗你,“视频博客”,因为我的老板听说那是未来)。

我们确实有一个数据库结构,但它非常糟糕,而且毫无道理地被拼凑在一起,所以我将在很大程度上忽略它并从头开始创建一个新数据库;但是,我有需要加载到应用程序中的现有数据(就像我说的,它是一个电子商务应用程序,我们有产品数据)。我需要将这些数据按摩成可用的格式,因为我们的供应商向我们提供了神秘的缩写列名,并且它是高度非规范化的,尤其是在类别中(我之前发布过一个关于它的问题 - 基本上类别表有六个字段,每个类别/子类别一个,如果该类别不适用,则其中一些为空白)。

有两个主要问题让我重新考虑:

  1. 正如我所说,需要将数据放入“适当的”数据库模式中;我不能按原样加载它。我对一个好的数据模型有一些想法,但我的分析还没有完成。最终会有大量的连接表将各种事物链接在一起(例如 products_categories、products_attributes、products_prices)等,这些表将不是通过 ID 而是通过它们的 SKU 链接产品(见下文)。

  2. 所有东西都已经有一个为其生成的 ID,但是我添加的任何新东西都需要自动生成一个;我怀疑这对于任何成熟的 RDBMS 来说都是一个问题,但我知道 Rails 喜欢自己生成 ID。另外,几乎所有的产品相关表都是通过SKU链接的(而且在供应商提供的数据中实际上是一个由前缀和库存号组成的组合键,它们组合起来构成了完整的SKU),而不是通过ID和I '不确定这是否会成为性能问题(当然,我总是可以在这些列上手动创建索引以加快速度)。然而,这确实意味着我需要脱离 Rails 约定。

简而言之,我认为就上市时间和易于开发而言,Rails 可能是一个不错的选择,但必须使用现有的数据内容可能会变得很痛苦,因为需要围绕开发应用程序那个,而不是“传统的” Rails 应用程序,这个因素让我对使用 Rails 产生了重大怀疑。还有一些其他问题(必须设置 Linux 服务器,而且我居住的地区几乎没有 Rails 开发人员,所以如果我离开公司,我基本上会把他们当作人质来更新/修改) . 我真的不确定如何进行的最佳途径。

4

4 回答 4

6

我会开发应用程序,就好像您没有数据一样。使用 ORM 并使您的数据库尽可能地达到最佳状态,但当然要记住您必须使用哪些数据来填充它(例如:不要为那些会让您逐条记录旧数据的事情制定疯狂的新约束)。

完成并测试后,编写一个导入脚本,将您的真实数据提取到您的新数据库中。

它与传统的设计/开发模型没有什么不同……除此之外,您还可以以半自动化的方式进行数据输入。

于 2009-01-23T20:39:14.997 回答
1

不久前我也遇到了同样的情况——一个蹩脚的 PHP 应用程序,它保存了 10 年的所有公司数据。

我所做的只是创建一个迁移模型并添加方法来导入每个资源。

class Migration
  def migration_all
    self.jobs
  end

  def self.jobs
    ...
  end
end

很酷的一点是,您可以安排导入哪些订单资源,因为其中一个可能会引用另一个。我还添加了直接修改数据库模式的方法。如果您必须保留现有的主键,一个很好的技巧是创建一个名为“legacy_id”的字段,复制现有的主键,完成后,只需删除“id”字段,重命名“legacy_id”字段到 'id',然后在新的 'id' 字段上添加 primary_key 约束。

于 2009-01-24T05:36:31.137 回答
1

不要使用 SKU 作为每个产品的唯一键 - 使用标准 Rails 递增 id。

SKU 可能会发生变化,因为它可能会被错误输入等,这将使更改其他表中的所有引用成为一场噩梦。将您当前的 id 放在 sku 列中,对其进行索引并将其他表中的引用更新为 Rails id。

您可以在控制器中执行 Product.find_by_sku(params[:sku]) ,设置 /products/:sku 路线等。我看不出您会获得什么(除了头痛)使用您未生成的 id 作为数据库主键。

于 2009-01-24T05:49:37.837 回答
1

我还建议您通过应用程序的验证运行您的旧数据,以确保您不会加载一堆不一致和错误。它将帮助您的应用程序顺利运行,并在您可以修复它们的地方突出显示现有的数据错误。

不要仅仅因为它已经存在就假设现有数据是有效的。

于 2009-01-24T09:59:36.597 回答