2013-06-13 5 views
0

Java EE, Oracle db 및 JPA를 사용하고 있습니다.데이터베이스 테이블에 열을 동적으로 추가 하시겠습니까?

oracle에 공통 테이블을 생성해야합니다. 예를 들어, 다음과 같이 ui를 사용하여 편집 할 수 있습니다.

id|tax1|tax2|tax3 
------------------ 
1 | 5 | 16| 9 
2 | 7 | 1 | 8 

사용자가 새 열을 추가 할 수 있어야합니다. 단지 "테이블을 변경"명령을 호출하는 botton을 쉽게 추가 할 것

id|tax1|tax2|tax3|tax4 (the tax4 column was added) 
----------------------- 
1 | 5 | 16| 9 | 0 
2 | 7 | 1 | 8 | 0 

,하지만 난 권한의 종류를 사용자에게 제공하지 않으려 : 위의 표는이 하나 같이해야합니다. 각 열을 다른 테이블의 행으로 표시하고 Java 프로세스를 사용하여 UI에 테이블을 작성하는 방법을 생각했습니다.

또 다른 관련없는 문제는 다음과 같습니다. 테이블의 데이터가 직접 계산에 영향을줍니다. 어떤 열이 추가되면 계산에 새 열/열을 고려해야합니다.

+1

새 열이 정말로 필요합니까? 이것은 나에게 나쁜 디자인처럼 보인다. –

+2

Id, Tax # 및 ValueOfTax라는 세 개의 열이있는 테이블이없는 이유는 무엇입니까? 그렇게하면 스키마를 변경하지 않고 한 테이블에 모든 정보를 저장할 수 있습니다. – jmpyle771

+0

귀하의 빠른 의견을 주셔서 감사합니다 : 장 버나드 Pellerin : 물론 그 나쁜 디자인! 불행히도 사용자 요구 사항입니다. @jeSuisBeau 생각하고있는 솔루션의 종류가 있습니다. 계산을 수정하는 방법에 대한 제안이 있습니까? – apr7

답변

2

는 "내가 가진 또 다른 관련이없는 문제는 : 테이블의 데이터는 모든 열이 추가되는 경우, 계산이 새 열/열을 고려해야합니다, 직접 계산을 에 영향을 미칩니다."

당신이 말하고자하는 것은 "또 다른 완전히 관련된 문제는 ..."입니다. 이 성명서는 제안 된 구현의 중대한 함의를 강조 표시하기 때문입니다. 칼럼을 동적으로 추가하는 것은 쉬운 일입니다.

어려운 비트는 코드베이스의 영향 분석을 수행하고 해당 테이블을 참조하는 모든 SQL을 평가하는 것입니다. 결국 계산에 새 열을 포함하는 것만으로는 충분하지 않습니다. 수정할 필요가있는 다른 SELECT가있을 수 있습니다 (e, g, 보고서). 물론 새 열에 데이터를 가져와야하므로 UPDATE 및 INSERT 문을 수정해야합니다. 이런 종류의 일은 책임있는 인간과 관련이 있습니다. 동적 SQL을 작성하여 자동으로 작성 하시겠습니까? 광기.

본인은 자신의 세무에 대한 책임이있는 조직의 신청서를 작성하지 않으 셨길 바랍니다.

어쨌든, 문제는 새로운 데이터를 내용 변경이 아닌 구조 변경으로 처리해야합니다. 반복되는 열 (TAX1, TAX2, TAX3)을 사용하여 자신의 것으로 선언 된 테이블이 빈약 한 데이터 모델의 일부이며 더 정규화가 필요하다는 것이 확실합니다.

이것은 세금 계산을 더 복잡하게 만들 수도 있지만 사실 좋은 일입니다. 복잡성은 데이터 모델이 아닌 비즈니스 규칙 구현에 있어야합니다. 적어도 이런 식으로 복잡성은 응용 프로그램의 CRUD 기능을 통해 흩어지는 대신 단일 프로그램 단위로 제한됩니다.

create or replace procedure add_new_col as 
    n pls_integer; 
begin 
    select count(*) into n 
    from user_tab_columns 
    where table_name = 'YOUR_TABLE' 
    and column_name like 'TAX%'; 

    execute immediate 'alter table your_table add tax'||trim(to_char(n+1))||' number'; 
end; 

당신은 사용자가 기본 테이블에 그들에게 광범위한 권한을 부여하지 않고이 절차에 대한 권한을 실행할 줄 수 : 완성도를 위해서


, 여기 광기의 산맥의 경로입니다.

관련 문제