2011-05-14 25 views
6

Verileri sınıflandırmak için bu aracı yapıyorum. örneğin,veritabanı yapısı hakkındaki görüşler ve öneriler

a:b:c:d:e 
a:b:c:d:e 
a:b:c:d:e 
a:b:c:d:e 

Ve içine bu satırları kırmaya kategori listesi vardır: Temelde ben düzenli şuna benzer bir düz dosya veri satırlarını alınacak

Original Cat1 Cat2 Cat3 Cat4 Cat5 
--------------------------------------- 
a:b:c:d:e a  b  c  d  e 

Şu an itibariyle, kategori isimlerinin yanı sıra veriyi kırmak için kategori sayısı da biliniyor. Ancak bu zaman içinde değişebilir (örneğin, eklenen/kaldırılan kategoriler ... değiştirilen toplam kategori sayısı).

Tamam, bu yüzden satırların nasıl ayrıştırılacağı veya bir db'ye veya başka bir şeye nasıl veri getirileceği konusunda yardım istemiyorum ... Tüm bunları nasıl yapacağımı biliyorum ve çekirdek betiğin daha önce yazıldığını biliyorum. Değer sıralarını ayrıştırmak ve değişken miktarda kategoriye ayırmak.

Çoğunlukla bu şeyleri saklamak için benim veritabanını yapısı konusunda tavsiye arıyorum. Bu yüzden bu konuda düşünüyordum ve bu ile geldi budur:

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 

Temelde fikir ben bir satır ayrıştırmak, ben yeni bir tabloya Generated girişi, hem de X girdilerini eklemek olacaktır Category_Values numaralı tabloda, X'in şu anda birçok kategorisi vardır. Ve kategori adları Categories başka bir tabloda saklanır. Benim komut dosyasını ne yapacak

yeni bir dosyaya oluşturulan kategori değerleri bir yere gönderilmek üzere ham değerler ve çıkış süreci satırlar olduğunu. Ama sonra bu db'ye sahip olduğum veriyi saklamak için veriyorum, böylece daha önce üretilen değerleri arayabilir ve listeleyebilir veya daha önce üretilen girdileri yeni değerler veya herhangi bir şeyle güncelleyebilirim.

bu iyi bir veritabanı yapısı benziyor mu? Eksik olduğum veya potansiyel olarak kendimi taklit ettiğim bir şey var mı? Örneğin, bu yapıyla ... iyi ... Bir sql uzman değilim, ama ben

select * from Generated where original_string = '$string' 
// id is put into $id 

gibi yapmak mümkün olmalıdır düşünmek ve sonra

select * from Category_Values where generated_id = '$id' 

... ve sonra da veri için arama sonuçları veya veri değiştirmek için çalışmak için çalışacağım ... iyi Ben kesinlikle bir sorgu veya bir şey ile bir sorgu içine bir araya gelebilir ama ben sql ile bu harika değilim Bu yüzden aslında bunu nasıl yapılacağını bilmiyorum ... ama bu noktada, bu db yapısından ihtiyacım olanı yapabilirim, ama olması gerekenden daha zor mu yapıyorum? Bariz noob hatası mı yapıyorsun?

+2

stackoverflow'a hoş geldiniz, çok güzel bir soru, iyi düzen ve çok sayıda arka plan. – Johan

+2

FWIW: Category_Values ​​öğesinden select_id (select created_id öğesinin orjinal_string = '$ string' öğesinden selected_id öğesini seçin) öğesinden seçin. – Jeremiah

+0

Teşekkürler Jeremiah, bunu yazacaktır :) – slinkhi

cevap

1

Benim önerim:

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 

Linkler
Zaman damgaları: http://dev.mysql.com/doc/refman/5.1/en/timestamp.html
tablo sözdizimi oluşturun: http://dev.mysql.com/doc/refman/5.1/en/create-table.html
numaralamalar: http://dev.mysql.com/doc/refman/5.1/en/enum.html

+0

Teşekkürler! Evet, gerçekte sütun türlerini, ID'ler ve materyaller için otomatik artımlar gibi benzer hale getirecektim. Bu şeylerin bazılarının amacından emin değilim (foriegn anahtar/referanslar gibi) ama öğrenebileceğim kadar kolay araştırma yapabilirim. – slinkhi

1

Sana ne yapmak istediğinizi bu çözüm için mükemmel olduğunu düşünüyorum .Eğer yeni kategoriler ekleyebilir veya eskileri emekli böylece Kategoriler listesi şimdi esnektir (Bir kategoriyi silmek kabul etmeden önce uzun ve zor düşünmeye tavsiye ederim - vb kaydını yetim ya da bunları kaldırmak olurdu)

Temel olarak, hedefe doğru olduğunuzu söylüyorum. Yapı basit ama sizin için iyi çalışacaktır. Büyük iş (ve soruda tam olarak doğru miktarda bilgi veren harika bir iş).

+0

Teşekkürler :) Gerçekten kategori isimleri üzerinde etkisi veya kaç tane olacak. Müşteri temel olarak yıllar içinde excel'in çıktı dosyalarını el ile oluşturdu ve süreci otomatikleştirmek için beni işe aldı. Bu yüzden tarihlerine dayanarak kategorilerin sık sık değişmeyeceğini biliyorum, ancak bazen değişiyorlar çünkü iş ihtiyaçları değişiyor. Ve genel olarak, temelde sadece orijinal değeri bozmak ve sınıflandırmalar oluşturmak, yani temelde sadece farklı şekillerde aynı verilere bakmak ve (yeniden) sınıflandırmanın geriye dönük olması, yani * değiştiğinde büyük bir anlaşma değil. – slinkhi