Tag: 规范化

处理“超标准化”数据

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

Rails 3中单个记录的多个外键?

我正在开发一个应用程序来管理注册课程的学生。 该应用程序将拥有可以登录和操作学生的用户。 用户还可以对学生发表评论。 因此,我们的三个主要课程是学生,用户和评论。 问题是我需要将个别评论与其他两个模型相关联:用户和学生。 所以我开始使用这样的基本代码…… class Student < ActiveRecord::Base has_many :comments end class User < ActiveRecord::Base has_many :comments end class Comment < ActiveRecord::Base belongs_to :student belongs_to :user attr_accessible :comment end 因此,在注释表中,单个记录将包含以下字段: id comment student_id user_id created_at updated_at 这提出了几个问题。 首先,用于创建关联对象的漂亮Rails语法分解。 如果我想发表新评论,我必须在外键之间进行选择。 所以… User.comments.create(attributes={}) 要么 Student.comments.create(attributes={}) 另一个选择是任意选择一个外键,并手动将其添加到attrs哈希。 所以… User.comments.create(:comment => “Lorem ipsum”, :student_id => 1) 这个选项的问题是我必须在我的评论模型中列出attr_accessible下的student_id。 […]