2011-02-23 2 views
1

Java 프로그램에 통합해야하는 몇 가지 요인이있는 표가 있습니다. 처음에는 숫자를 하드 코딩 할 생각 이었지만 요인에 맞는 데이터 구조를 만들려고 애쓰는 것처럼 보입니다. 그래서 저는 이것을 데이터베이스, 플랫 파일 또는 자바에서 참조 데이터로 구현하는 것이 더 나은지 알아 보려고했습니다. 이 숫자는 6 개월마다 바뀌며 수학 계산에 사용됩니다.참조 데이터 구현 방법 Java/DB

생각하십니까? 이 같은 느린 변화하는 데이터의 경우

Factor List

답변

1

관계없이 당신이 그들을 저장하는 방법에 대한 데이터를 포함하는 데이터 구조를 만들어야 할 것입니다. 그러나 이런 종류의 데이터를위한 데이터 구조는 복잡 할 필요가 없습니다. 속성을 가진 값 목록 일뿐입니다. 테이블을 복잡한 구조로 저장할 필요가 없습니다.

데이터를 단일 목록으로 표시 할 때 일반 텍스트 파일에서 데이터를로드하는 것도 매우 쉽습니다.

public class DataTable { 

    private List<Entry> table = new ArrayList<Entry>(); 

    public double getValue(Sex sex, MaritalStatus maritalStatus, AgeInterval ageInterval, Type type) { 
     for (Entry entry : table) { 
      if (entry.sex == sex && entry.maritalStatus == maritalStatus && entry.ageInterval == ageInterval && entry.type == type) { 
       return entry.value; 
      } 
     } 
     throw new IllegalArgumentException("Unknown value"); 
    } 

    public void load(String filename) { 
     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filename))); 
      String line; 
      while ((line = reader.readLine()) != null) { 
       StringTokenizer t = new StringTokenizer(line, ":"); 
       table.add(new Entry(
         Sex.valueOf(t.nextToken()), 
         MaritalStatus.valueOf(t.nextToken()), 
         AgeInterval.valueOf(t.nextToken()), 
         Type.valueOf(t.nextToken()), 
         Double.valueOf(t.nextToken()))); 
      } 
     } catch (IOException e) { 
      throw new IllegalStateException("Failed to read the data file", e); 
     } 
    } 

} 

enum Sex {M, F} 
enum MaritalStatus {SINGLE, MARRIED} 
enum AgeInterval {I16_21, I22_35, I35_55, I55} 
enum Type {GD, NGD} // Whatever this is ... 

class Entry { 
    Sex sex; 
    MaritalStatus maritalStatus; 
    AgeInterval ageInterval; 
    Type type; 
    double value; 

    Entry(Sex sex, MaritalStatus maritalStatus, AgeInterval ageInterval, Type type, double value) { 
     this.sex = sex; 
     this.maritalStatus = maritalStatus; 
     this.ageInterval = ageInterval; 
     this.type = type; 
     this.value = value; 
    } 
} 

데이터 파일은 다음과 같습니다

M:SINGLE:I16_21:GD:1.10 
F:SINGLE:I16_21:GD:1.20 
... 
3

, 나는 외부 설정 파일을 사용합니다. 데이터 구조에 따라 CSV가 제대로 작동하고 업무용 사용자가 Excel을 사용하여 쉽게 편집 할 수 있습니다.

자주 변경 될 경우 프로그래밍 방식으로 데이터를 생성해야하거나 데이터 편집을위한 UI를 제공하려는 경우 데이터베이스로 이동할 수 있습니다.

0

gender, age, marital_status, GD_VS_NGD, 테이블 안의 데이터 및 레코드를 유지할 필요가없는 한이 데이터를 사용하는 기간의 식별자가 필드를 분할 할 수 있습니다. 데이터의

1

XML로 표시 할 수 있지만 숫자 데이터가 약간있을 수 있습니다. 그러나 XML을 사용하면 상당히 설명적이고 스스로 문서화 할 수 있습니다. 그런 다음 나중에이를 Java (또는 원하는 다른 언어)로 쉽게 파싱 할 수 있습니다.

부분 XML 예제 :

<dataset> 
    <gd> 
    <16to21> 
     <single> 
     <male>1.10</male> 
     <female>1.20</female> 
     </single> 
     <married> 
     <male>0.90</male> 
     <female>0.80</female> 
     </married> 
    </16to21> 
    ... 
    </gd> 
    <ngd> 
    ... 
    </ngd>