반응형

금융권( 특히 1금융 )의 사이트들에서는 물리모델을 생성할때 DDL문을 바로 사용하지 않습니다.
ERD를 그리고, META와 연동하여 모델을 관리하고, META에서 생성된 DDL스크립트를 이용하여 물리모델을 생성합니다.

컬럼매핑정의서를 이용하여 ERD를 그리는 프로그램입니다.
모델 객체는 생성되지만, Realation은 직접 그리셔야 합니다.

※ ERD 일괄등록 문서라 함은, ER-Win에서 제공하는 Accerator의 양식을 의미합니다.

■ SOURCE

 

    private final static int T테이블 = 16;
    private final static int 상태 = 23;
    
    public static void main(String[] args) {
        
        System.out.println( "■ ERD 등록문서 생성 START" );

        ArrayList<ArrayList<String>> arr2AT = TxtFile.readArr2AT( "C:/workspace/컬럼매핑정의서/컬럼매핑정의서.dat" );  // 컬럼매핑정의서 READ
        
        // ERD Template
        String strERD = "Subject Name, Entity Name, Table Name, Entity Definition, Attribute Name, Column Name, Domain Name, Data Type, Attribute Definition, PK, Not Null, Logical Only";
        int iERD = strERD.split( "," ).length;
        
        HashMap<String, ArrayList<ArrayList<String>>> ma2ERD = new HashMap<String, ArrayList<ArrayList<String>>>(); 
        
        
        String strDataType = "";  // 컬럼의 DataType
        String strNNL = "";       // NotNull
        
        for( int i = 0; i < arr2AT.size(); i++ ) {
            
            ArrayList<String> arrATRow = arr2AT.get( i );
            
            if( arrATRow.get( 상태 ).contains( "삭제" ) ) continue;
            
            ArrayList<ArrayList<String>> arr2ERD = new ArrayList<ArrayList<String>>();  // ERD 등록대상
            ArrayList<String> arrERDRow = new ArrayList<String>();
            
            // ERD전체파일
//          if( ma2ERD.containsKey( arrATRow.get( T테이블 ) ) ) arr2ERD = ma2ERD.get( arrATRow.get( T테이블 ) );
            
            if( ma2ERD.containsKey( "ALL" ) ) arr2ERD = ma2ERD.get( "ALL" );
            
            // ERD Template로 생성
            for( int k = 0; k < iERD; k++ ) arrERDRow.add( "" );
            
                // Data-Type 가공
                if( !arrATRow.get( 20 ).trim().isEmpty() ) {
                    strDataType = arrATRow.get( 20 );
                    if( !arrATRow.get( 21 ).trim().isEmpty() ) {
                        strDataType += "(" + arrATRow.get( 21 );
                        if( arrATRow.get( 22 ).trim().isEmpty() ) strDataType += ")";
                        else strDataType += "," + arrATRow.get( 22 ) + ")";
                    }
                }
                
                // NotNull 가공
                if( !arrATRow.get( 11 ).trim().isEmpty() ) strNNL = "NotNull";
            
            // Data Setting
            arrERDRow.add(  0, "대외" );              // Subject Name
            arrERDRow.add(  1, arrATRow.get( 17 ) );  // Entity Name*
            arrERDRow.add(  2, arrATRow.get( 16 ) );  // Table Name
            arrERDRow.add(  3, arrATRow.get( 17 ) );  // Entity Definition( Entity Name )
            arrERDRow.add(  4, arrATRow.get( 19 ) );  // Attribute Name*
            arrERDRow.add(  5, arrATRow.get( 18 ) );  // Column Name
//          arrERDRow.add(  6, "" );                  // Domain Name
            arrERDRow.add(  7, strDataType );         // Data Type
            arrERDRow.add(  8, arrATRow.get( 25 ) );  // Attribute Definition
            arrERDRow.add(  9, arrATRow.get( 12 ) );  // PK
            arrERDRow.add( 10, strNNL );              // Not Null
//          arrERDRow.add( 11, "N" );                 // Logical Only
            
            arr2ERD.add( arrERDRow );
            ma2ERD.put( "ALL", arr2ERD );
        }
        
        for( String strKey : ma2ERD.keySet() ) {
            XlsFile.writeArr2( "C:/workspace/컬럼매핑정의서/#ERDby테이블/ERD_등록문서_" + strKey, strERD, ma2ERD.get( strKey ) );
        }
        
        System.out.println( "    - ERDby테이블 등록문서 생성 : " + ma2ERD.size() );
    }

소스가 좀 지저분 합니다. 

소스의 기본 구조는 테이블별로 ER-Win등록양식 파일로 각각 만드는 구조입니다.

이를 전체테이블을 하나의 파일로 만들기 위해 (임시로) 적용하다보니 좀 이상한 구조를 가지게 되었습니다.

 

ERD작업은 최초에 한번은 전체 테이블을 일괄로 Upload하여 생성하고, 이후에는 필요시마다 테이블 단위로 Upload하여 갱신합니다. 위의 소스는 '전체 테이블'을 ERD로 생성하기 위한 소스입니다.

 

// 테이블단위로 ERD등록문서 생성
// if( ma2ERD.containsKey( arrATRow.get( T테이블 ) ) ) arr2ERD = ma2ERD.get( arrATRow.get( T테이블 ) );

소스에서 위와 같이 '테이블단위로 ERD등록문서 생성'이라고 주석처리된 소스가 있습니다.

 

if( ma2ERD.containsKey( "ALL" ) ) arr2ERD = ma2ERD.get( "ALL" );

위의 소스 대신 주석으로 처리된 소스를 사용하면, 테이블 단위로 파일이 생성되게 됩니다.

 

끝.

반응형