我正在构建此工具来分类数据。基本上我会定期接收平面文件中的数据行,如下所示:
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
中插入一个新条目,以及在表Category_Values
中插入X条目,其中X当前有很多类别。类别名称存储在另一个表Categories
中。
我的脚本将立即执行的是处理原始值行并将生成的类别值输出到要在某处发送的新文件。但后来我有这个数据库,我正在制作生成的数据,以便我可以创建另一个脚本,我可以搜索并列出以前生成的值,或使用新值或其他任何内容更新以前生成的条目。
这看起来像一个好的数据库结构吗?我有什么明显的遗漏或者可能会让自己陷入困境?例如,有了这个结构......好吧......我不是一个SQL专家,但我想我应该能够做到这一点
select * from Generated where original_string = '$string'
// id is put into $id
然后
select * from Category_Values where generated_id = '$id'
...然后我会将我的数据用于搜索结果或表单来改变数据......我相当确定我甚至可以将它组合成一个带有连接或其他东西的查询但是我我对sql不是那么好,所以我不知道如何实际做到这一点..但是,我知道我可以从这个数据库结构中做我需要的东西。但我是否正在努力比它需要的?制造一些明显的菜鸟错误?
答案 0 :(得分:1)
我的建议:
Table: Generated
id unsigned int autoincrement primary key
generated_timestamp timestamp
last_updated timestamp default '0000-00-00' ON UPDATE CURRENT_TIMESTAMP
generated_method ENUM('manual','auto')
original_string varchar (255)
Table: Categories
id unsigned int autoincrement primary key
category_name varchar(20)
Table: Category_Values
id unsigned int autoincrement primary key
category_id int
generated_id int
category_value varchar (255) - value for the category
FOREIGN KEY `fk_cat`(category_id) REFERENCES category.id
FOREIGN KEY `fk_gen`(generated_id) REFERENCES generated.id
<强>链接强>
时间戳:http://dev.mysql.com/doc/refman/5.1/en/timestamp.html
创建表格语法:http://dev.mysql.com/doc/refman/5.1/en/create-table.html
枚举:http://dev.mysql.com/doc/refman/5.1/en/enum.html
答案 1 :(得分:1)
我认为这个解决方案非常适合您想要做的事情。 “类别”列表现在具有灵活性,因此您可以添加新类别或退出旧类别(我建议在同意删除类别之前对其进行长期和艰苦的思考 - 您是否可以孤立记录或删除它们等等。)
基本上,我说你的目标正确。结构很简单,但它适合你。干得好(并且在问题中提供了正确数量的信息,并且做得很好)。