복붙노트

[RUBY-ON-RAILS] 동적 테이블 생성

RUBY-ON-RAILS

동적 테이블 생성

먼저 당신이 나를 더 잘 도울 수있을 수 있도록 내 상황을 설명 할 수 있습니다. 두 부분이 있습니다.

1: 나는 실행 파일들을 분석하는 프로그램이 있습니다. 그것은 나중에 DB 저장 및 볼 수있는 웹 사이트에 공급 될 것 "보고서"를 생성합니다. 사용자가 거의 아무것도를 조회 할 수있는이 보고서는 거의 모든 유형의 데이터를 포함 할 수 있습니다. 나는 그것이 매우 종료 열려.

2 : 이 보고서를 통해 웹 사이트 파싱은 일반적인 것들에 대한 항목을 추가합니다. 뿐만 아니라, 발견 된 새로운 데이터에 대한 새 테이블을 만듭니다. 또한 REPORT_ID에서 이러한 동적으로 생성 된 테이블의 모든 매핑을 저장합니다. 의 예를 들어 보고서 누군가가 표준 편차를 계산하고 싶어하고, STD 테이블이있을 것보다이이 보고서에 대한 감각을했다.

현재이 사이트는 PHP로 작성하고, 종류 지저분한으로 보인다. 이 PHP를 할 수있는 더 좋은 방법이 있나요. 또한, 나는 레일 때문에 조직을 위해서이 재 작업 고려 중이 야. 레일, "method_missing?"에 더 좋은 방법이 있나요.

나는 매우 구축 웹 사이트에 숙련 및 DB에서 아마추어, 친절하시기 바랍니다 있지 않다.

감사 에릭

해결법

  1. ==============================

    1.외모는 가장 반 구조화 데이터를 구조화되지 않은, 또는 것을 좋아한다. 당신이 저장소로 XML을 사용하지 않는 클래식 관계형 DB 테이블이 적합하지 않습니다. 당신은 일반적으로 XML로, 중간 보고서 - 정의 언어로 올라오고 다음 DB에 그 저장 고려할 수 있습니다. MS SQL 서버, Oracle 및 DB2 지원 저장 및 XML 데이터 쿼리.

    외모는 가장 반 구조화 데이터를 구조화되지 않은, 또는 것을 좋아한다. 당신이 저장소로 XML을 사용하지 않는 클래식 관계형 DB 테이블이 적합하지 않습니다. 당신은 일반적으로 XML로, 중간 보고서 - 정의 언어로 올라오고 다음 DB에 그 저장 고려할 수 있습니다. MS SQL 서버, Oracle 및 DB2 지원 저장 및 XML 데이터 쿼리.

    어떤 사고 후 .. 또한 관찰 패턴으로보고이 예제에 적응 할 수 있다면 볼 수 있었다. 패턴이 OO이지만, 그것은 SQL에서 수행 할 수 있습니다. 그것은 조금 긴 설명입니다,하지만 난 여기에 단순화 된 모델을 게시 한; 당신이 도움이되기를 바랍니다.

  2. ==============================

    2.실행시 데이터베이스의 구조를 수정하는 것은 매우 위험합니다. 난 당신이 또한 그것을 인식하는 정보에 "태그"를 줄 수있는 "혼합"유형 테이블에서 알 수없는 또는 새로 발생 정보를 저장 건의 할 것입니다. (예 : 표준 편차) 정보의 새로운 유형을 충족하는 경우, 새 태그 (파일 확장자 같은 비트)를 만들고 여기에 관련된 태그 정보 테이블의 정보를 추가 할 수 있습니다. 새 테이블을 만들 경우, 당신은 스키마를 변경하기 때문에, 당신은 데이터베이스의 이용 규칙을 변경합니다.

    실행시 데이터베이스의 구조를 수정하는 것은 매우 위험합니다. 난 당신이 또한 그것을 인식하는 정보에 "태그"를 줄 수있는 "혼합"유형 테이블에서 알 수없는 또는 새로 발생 정보를 저장 건의 할 것입니다. (예 : 표준 편차) 정보의 새로운 유형을 충족하는 경우, 새 태그 (파일 확장자 같은 비트)를 만들고 여기에 관련된 태그 정보 테이블의 정보를 추가 할 수 있습니다. 새 테이블을 만들 경우, 당신은 스키마를 변경하기 때문에, 당신은 데이터베이스의 이용 규칙을 변경합니다.

  3. ==============================

    3.테이블 수는 광대하게되면 자동으로 생성 테이블은 당신에게 두통을 줄 수 있습니다. 5000 항목 DIRS에 대한 EXT3에서 디렉토리 목록 오히려 시간이 넘는 10 만 파일을받을 때이 걸린다 확실히 비싼 느낌을 시작합니다. (MySQL의 CLI는, 당신은 -A 스위치를 연결해야이 연결되면 모든 테이블 이름을 캐시하려고 시도하고를 건너 뛸 수 있습니다.)

    테이블 수는 광대하게되면 자동으로 생성 테이블은 당신에게 두통을 줄 수 있습니다. 5000 항목 DIRS에 대한 EXT3에서 디렉토리 목록 오히려 시간이 넘는 10 만 파일을받을 때이 걸린다 확실히 비싼 느낌을 시작합니다. (MySQL의 CLI는, 당신은 -A 스위치를 연결해야이 연결되면 모든 테이블 이름을 캐시하려고 시도하고를 건너 뛸 수 있습니다.)

    당신은 보고서의 생성을 위해 임시 테이블을 사용하는 것을 고려하고 가능한 검색 이후에 대한 보고서 문자열로 아래로 결과를 응축 수 있습니다. 또는, JP 언급 같은 테이블 구조가 같은 테이블에서 태그 값 및 보고서 :

    create table stddev (
        report_id int(11),
        field_name int(11), -- fk to field
        field_value double
    );
    create table reports (
        report_id int(11);
        report_name varchar(255);
    );
    

    그리고 하나 개의 보고서에 대한 데이터를 얻을, 당신은이 REPORT_ID를 지정하는 선택 할 것입니다 :

    select * from stddev where report_id = 123;
    

    나는 당신의 보고서 이름, 필드 이름에 대한 테이블을 만들 것입니다, 당신은 아마 당신의 보고서 저장 파생 / 계산 된 값에서 별도의 입력 값으로합니다.

    에 따라 얼마나 자주 입력 새로운 데이터, I하지 조기에 최적화 몇 가지 큰 테이블에서 작은 테이블의 많은에 대한 것입니다. 제대로 색인, 큰 테이블을 잘 수행 할 수 있습니다.

    그러나,이 응용 프로그램이 처리하는 데이터의 크기는 무엇인가? 로 시작하는 많은 작은 테이블을 사용하는 이유가 있었습니까?

    나는 많은 양의 데이터를 처리하기 위해 PHP를 사용합니다. 스키마 감각을 만들 경우, PHP 코드도 더 의미가 있습니다. 만약 그랬다면, 난 내가 언어의 실제 구조적인 한계에 올 때까지 내가 시작한 일을 고집 것, 다른 프로그래밍 언어로 전환 할 것이다; 나를 위해 레일로 전환하는 것은 시간 낭비 일 것이다.

  4. from https://stackoverflow.com/questions/1655202/dynamic-table-generation by cc-by-sa and MIT license