数据库设计 - 寻找根本性的变化

时间:2011-02-19 11:48:16

标签: mysql database-design

我有一个存储 plant 信息的关系数据库。有一个plant_id,一个链接到类别表的工厂类别,等等。设计非常好,但我面临的任务非常有趣。数据必须由用户自动填充。

理想情况是用户登录网站并上传其数据集,通常采用纯文本格式(例如.csv或其他Windows文档),并且此数据会自动插入到我的工厂数据库中。

所以我基本上给出了规范;用户应将其.csv列设置为特定名称,以便脚本可以链接到我的数据库字段。这些领域中有许多涉及植物的通用属性......例如植物高度或植物颜色。此信息可能是使用公制系统或使用其他系统的高度。颜色可能类似于褐色,实际上与 brown 相同。这些例子有数百个。

我正在尝试自动修复这些不一致性,以便褐色属性链接到实际的棕色。此链接很重要,因为使用该网站的人会想要找到给定颜色的植物,现在我必须通过并手动关联所有这些不同的属性。

您如何解决此问题并避免人工干预?

4 个答案:

答案 0 :(得分:3)

哦!这样一个有趣的工作。

您需要实际编写可以根据语法更新数据的语法和解析器。你可以做的是对一组有限的数据进行初步研究并创建一些语法并尝试上传数据。如果有任何失败,请记录语法,期望值和实际值的详细信息,例如说“植物颜色不匹配,预期'褐色(或棕色,棕色)”并找到“borwn”;请更新输入数据或将'borwn'添加到语法中“。这将暗示你将来该做什么。此外,您可以计划在查看某些模式的语法中自动添加这些内容。但最初,它可以是手动的。因此,您必须不时地查看日志并更新语法。

稍后,如果您觉得舒服,可以向用户公开一些界面以更新语法。

我说话非常积极,但我知道会有很多挑战。请回过头来接受挑战。

答案 1 :(得分:2)

如果你想接受植物高度的所有这些值--3mm,3cm,3in,3“,3',3 - 那么你想做的事情是不可能的。没有自动的方法来判断是否是裸露的' 3'表示'3cm'或'3in'。

有几种不同的方法可以解决这类问题。但您采取的方法部分取决于谁对数据感兴趣。

如果用户上传的数据主要用于用户自己,他们会容忍为您做更多的工作。如果数据主要用于他人,则他们不会。

您可以选择在接受的内容中吝啬或自由。您越吝啬,您的流程就越自动化。

也许您可以通过提供用户an Excel spreadsheet with validation来吝啬。

如果你必须对所接受的内容非常自由,你可能需要几个表来将一个标准值映射到许多非标准值。用于映射颜色的表格可能如下所示:

Standard  User-supplied
--
brown     brown
brown     brownish
brown     brn
brown     puce

您必须先手动填充该表格。但是,您处理的数据越多,表中就越有可能存在用户提供的颜色。

该表不必存在于数据库中。它可能是外部的,您的数据清理过程可能是外部的。用于数据仓库的ETL的“T”部分有时以这种方式完成。 (“ETL”代表“提取,转换和加载”。)

答案 2 :(得分:0)

即使我在考虑这样的事情......也许这个链接可以提供一些帮助 http://magia3e.wordpress.com/2007/05/29/semantic-analysis-making-sense-of-the-chaos-of-free-text/

答案 3 :(得分:0)

我同意Catcall的答案,即将彩色地图映射到真实颜色。也许对于你的第一次迭代,你可以做一些研究来提出一些这些值,从包含常见颜色名称的单词开始(就像你的棕色BROWNish例子)。另外,对于其他列,我确信通过分析数据可以找到有限集。例如高度cm,in,ft等。没有那么多。

最后,您必须为每列提供一组有限的描述符。它们也许可以嵌套(红色可能是红色,栗色,紫红色,勃艮第的父母)。您可以在导入时构建到应用程序中的功能将分析已导入的列并提供符合有限集的建议。如果它是真正基于社区的站点,您可以允许用户为该列提出新选项。就像stackoverflow的标记功能一样。

xkcd的家伙用颜色做了一个有趣的实验,不确定这些数据是否可用 - http://blog.xkcd.com/2010/05/03/color-survey-results/

祝你好运!