2012-10-05 6 views
1

나는 데이터베이스 프로그램을 만들고있다. 사용자가 원하는만큼 많은 열을 정의 할 수 있기를 바랍니다. 나는 다음의 클래스 파일의 각 레코드를 정의 할 어떻게?변수 속성으로 클래스를 정의하는 방법은 무엇입니까?


그것은 학교의 일부 할당-는 교사에 대해 서로 다른 점수와 좋아하는 보유 것 (속성은 사용자가 다른 사용자 것 때문에) 그들이 추가 할 수있는 다른 학생들도 있지만 새로운 과제 인 test (컬럼)를 추가 할 수 있습니다.

+0

상당히 까다로운 소리 ... 자세한 내용? – Coffee

+0

테이블이 디 마이 미성 (dymamic)이고 매핑 된 객체가 동적이어야한다고 말합니까? –

+0

이 문제를 처리하는 데는 여러 가지 방법이 있지만 그 중 아무 것도 완벽하지 않습니다. 강사가 불가능하다고 생각하는 "완벽한"솔루션을 찾는 것보다 창의력을 발휘하고 언어를 파악하십시오. 유연성이 뛰어나고 견고한 제품을 설계하십시오. 쉽게 흩어 지거나 과도하게 늘어나지 않고 쉽게 확장 할 수 있습니다. 복잡한. 강사가 모두 지각력이 있다면 당신은 그물에서 떨어지지 않은 그런 디자인보다는 더 나은 성적을 얻을 것입니다. –

답변

1

실행중인 데이터베이스에 열을 추가하고 제거하려는 경우 일반적으로 디자인이 잘못되었음을 나타냅니다. '열'은 아마도 단일 표의 행과 일치해야합니다.

1

:

그렇게 여러 가지 방법이 있습니다 Hibernate

에서보세요. 기본적으로 Java 세계에서는 모든 클래스를 컴파일해야 실행될 수 있습니다. 속성을 기반으로 클래스에 동적으로 필드를 추가하는 것은 좋은 방법이 아닙니다. 컬렉션을 사용하는 것이 좋습니다. 이것은 다음과 같이 이루어질 수 있습니다 :

List<Map<String,Object>> data; 

지도와 같은 열 이름을 열 값의 키 및 값으로 사용할 수 있습니다. 키는 등록 정보에서 구성 할 수 있으며 데이터는 임의의 순서로 저장할 수 있습니다.

2

당신은 데이터베이스 설계의이 종류를 필요, 그래서 당신은 새로운 "열"(클래스 속성) 또는 아무것도 추가 할 필요가 없습니다 :

TEACHERS (Class called Teacher) 
________ 
TeacherId 
Name 


STUDENTS (Class called Student) 
________ 
StudentId 
Name 


ASSIGNMENTS (Class called Assignment) 
___________ 
AssignmentId 
TeacherId (REF) 
Name 


GRADES (Class called Grade) 
______ 
AssignmentId (REF) 
StudentId (REF) 
Grade 

당신은 Map를 사용하여 Java 클래스 디자인에 변환 할 수 있어야한다을 에스.

숙제이기 때문에 특별히 DB 디자인 ("의사 코드")을 제공하고 Java 코드는 제공하지 않습니다.

FYI : REF는 참조 용입니다 (DB 언어의 외래 키).

+0

나는 다른 대답이 맞을 것이라고 확신하지만 이것은 이해하기 쉽다 - 고마워요! – user1723326

0

이 작업 유형의 주된 문제점은 구성을 저장하는 방법입니다. 각 구조 수정에 대한 클래스를 만들 필요가 없습니다.

작업을 3 개로 나누어야합니다.

  1. 테이블 정의를 확장하는 방법은 무엇입니까?
  2. 이러한 테이블에 대해 쿼리를 실행하는 방법은 무엇입니까?
  3. 쿼리 결과의 결과를 표시하는 방법은 무엇입니까?

A1 : 어떻게 테이블을 확장하려면?

열이있는 테이블을 확장하려면 해당 데이터가 있어야합니다.쉽게 열을 추가하는 ALTER 문을 만들 수있는 그 데이터를 갖는

  • 테이블 이름
  • 열 이름
  • 열 유형

:

그래서 당신은 사용자로부터 얻어야한다 .


대답 : 동적 테이블에서 쿼리를 실행하는 방법은 무엇입니까?

여기에는 영리하거나 정상적인 두 가지 옵션이 있습니다.

  • 은 보통
  • 영리한는 데이터베이스 테이블의 정보를 사용하는 일부 테이블에 사용자 입력을 저장하는 것입니다.

입수 할 수있는 데이터는 어떻게 가져올 것입니까? importart는 어떻게 저장합니까? 테이블을 매핑 할 개체를 만들 것을 제안합니다.

이 결과는 당신이 쉽게 테이블에 대해 쿼리를 작성하는 abre입니다 같은 구조를 갖는

TABLE_A | COLUMN_1 | String 
TABLE_A | COLUMN_2 | Integer 
TABLE_A | COLUMN_3 | Boolean 

Simplyfied 코드

UserTable userTable = new UserTable("TABLE_A"); 
    userTable.addColumn(new UserTableColumn("COLUMN_1",String.class)); 
    userTable.addColumn(new UserTableColumn("COLUMN_2",Integer.class)); 
    userTable.addColumn(new UserTableColumn("COLUMN_3",Boolean.class)); 

을 설정합니다.

A3 : 동적 테이블에서 데이터를 조작하는 방법은 무엇입니까?

이것은 까다로운 부분입니다. 이를 수행하는 방법에는 여러 가지가 있습니다. 덜 복잡한 것은 키 - 값 구조를 갖는 객체를 만드는 것입니다. 여기서 key는 열 이름이고 value는 값입니다. 중요한 것은 기본 키를 정의하는 것입니다.이 키를 사용하면 간단한 방법으로 새 ​​행을 삽입 할 수 있으므로 기존 키를 삽입해야하거나 이전 키만을 업데이트해야합니다.

이 간단한 설명이 사용자의 요구를 충족 시키길 바랍니다.

행운을 빈다.

관련 문제