我正在構建用於分類數據的此工具。基本上,我會定期接收平面文件數據的行看起來像這樣:關於數據庫結構的意見和建議
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