我正在构建用于分类数据的此工具。基本上,我会定期接收平面文件数据的行看起来像这样:关于数据库结构的意见和建议
a:b:c:d:e
a:b:c:d:e
a:b:c:d:e
a:b:c:d:e
而且我有一个类别列表最多打破这些行插入,例如:
Original Cat1 Cat2 Cat3 Cat4 Cat5
---------------------------------------
a:b:c:d:e a b c d e
从第二个角度来看,类别名称是已知的,以及用于分类数据的类别数量。但是这可能会随着时间的推移而变化(例如,添加/删除的类别......更改的类别总数)。
好吧,所以我并不是真的在寻求帮助来解析行或将数据导入数据库或其他任何东西......我知道如何做到这一点,并且核心脚本已经大部分已经写好了,以便处理分析值的行并将其分成可变数量的类别。
大多数情况下,我正在寻找关于如何构建我的数据库来存储这些东西的建议。所以我一直在想这件事,这就是我想出了:
Table: Generated
generated_id int - unique id for each row generated
generated_timestamp datetime - timestamp of when row was generated
last_updated datetime - timestamp of when row last updated
generated_method varchar(6) - method in which row was generated (manual or auto)
original_string varchar (255) - the original string
Table: Categories
category_id int - unique id for category
category_name varchar(20) - name of category
Table: Category_Values
category_map_id int - unique id for each value (not sure if I actually need this)
category_id int - id value to link to table Categories
generated_id int - id value to link to table Generated
category_value varchar (255) - value for the category
基本的想法是,当我分析一排,我将插入一个新的进入表Generated
,以及X项在表Category_Values
,其中X是目前有很多类别。类别名称存储在另一个表Categories
中。
我的脚本将立即执行的操作是处理原始值行并将生成的类别值输出到新文件以发送到某处。但后来我有了这个数据库来存储生成的数据,以便我可以创建另一个脚本,在那里我可以搜索并列出以前生成的值,或使用新值或其他值更新以前生成的条目。
这看起来像一个好的数据库结构吗?任何明显的我失踪或潜在地嘲笑我自己?例如,通过这种结构......呃......我不是一个SQL专家,但我想我应该能够做到像
select * from Generated where original_string = '$string'
// id is put into $id
然后
select * from Category_Values where generated_id = '$id'
...然后我将我的数据与搜索结果或表单一起使用以更改数据......以及我相当肯定我甚至可以将它与一个连接或某个东西结合成一个查询,但我对于sql并不是那么好所以我不知道如何实际做到这一点..但点是,我知道我可以做什么,我需要从这个数据库结构..但我做得比它需要更难?做出一些明显的noob错误?
欢迎来到stackoverflow,非常好的问题,良好的布局和大量的背景。 – Johan 2011-05-14 17:36:04
FWIW:select * from Category_Values where generated_id in(select generate_id from Generated where original_string ='$ string') – Jeremiah 2011-05-14 17:47:59
谢谢Jeremiah,会写下来:) – slinkhi 2011-05-14 17:59:40