我的雇主是一家小型办公用品公司,正在更换供应商,我正在查看他们的电子内容以提出一个强大的数据库架构;我们之前的模式几乎是完全不加思索地拼凑在一起的,而且它几乎导致了一个无法忍受的数据模型,其中包含损坏的、不一致的信息。
新供应商的数据比旧供应商的数据要好得多,但他们的数据就是我所说的超标准化。例如,他们的产品类别结构有5个层次:Master Department、Department、Class、Subclass、Product Block。此外,产品块内容具有产品的长描述、搜索词和图像名称(想法是产品块包含产品和所有变体 - 例如,特定的笔可能采用黑色、蓝色或红色墨水;所有这些items 本质上是相同的东西,因此它们适用于单个产品块)。在我得到的数据中,这表示为产品表(我说“表”,但它是一个包含数据的平面文件),它引用了产品块的唯一 ID。
我正在尝试提出一个强大的模式来容纳我提供的数据,因为我需要相对较快地加载它,而且他们给我的数据似乎与他们的数据类型不匹配在他们的示例网站 ( http://www.iteminfo.com )上提供演示。无论如何,我不打算重用他们的演示结构,所以这是一个有争议的问题,但我正在浏览该网站以了解如何构建事物的一些想法。
我不确定是否应该以这种格式保存数据,或者例如使用自引用关系将主/部门/类/子类合并到一个“类别”表中,并将其链接到产品块(产品块应该分开,因为它不是一个“类别”,而是给定类别的一组相关产品)。目前,产品块表引用子类表,因此如果我将它们合并在一起,这将更改为“category_id”。
我可能会创建一个电子商务店面,利用 Ruby on Rails 上的这些数据(或者这是我的计划,无论如何),所以我试图避免以后被卡住或拥有一个臃肿的应用程序 - 也许我我想太多了,但我宁愿安全也不愿后悔;我们之前的数据一团糟,由于数据不一致和不准确,公司损失了数万美元的销售额。此外,我将通过确保我的数据库是健壮的并强制执行约束来稍微打破 Rails 约定(我也计划在应用程序级别这样做),所以这也是我需要考虑的事情。
你会如何处理这样的情况?请记住,我已经将数据加载到模拟表结构的平面文件中(我有文档说明哪些列是哪些列以及设置了哪些引用);我正在尝试决定是否应该让它们像目前一样正常化,或者我是否应该寻求整合;我需要知道每种方法将如何影响我使用 Rails 对网站进行编程的方式,因为如果我合并,一个表中基本上会有 4 个“级别”的类别,但这似乎比单独的表更易于管理每个级别,因为除了子类(直接链接到产品块)他们不做除了显示它们下的下一级类别之外的任何内容。我总是对处理这样的数据的“最佳”方式感到茫然——我知道“规范化直到它受伤,然后非规范化直到它起作用”的说法,但直到现在我才真正需要实施它。