2013-06-06 1 views
1

나는 이미 생성 된 테이블에 컬럼을 추가하는 ALTER 프로 시저를보고 있었고 컬럼을 동적으로 추가하는 것이 좋은 습관으로 간주되지 않는다는 많은 대답이있었습니다.
특정 날짜의 출석을 모니터링하기 위해 여분의 열을 만들려고합니다. 그래서 그 목표와 관련하여 테이블을 여전히 변경하고 있습니다. 그 방법은 실제로 볼 수 없기 때문입니다.이미 생성 된 테이블에 열을 추가하는 것이 나쁜 방법으로 간주되는 이유는 무엇입니까?

+0

이것은 구현의 다른 측면을 혼합한다는 것을 의미합니다. 그것은 보안 위험의 전체 번들을 엽니 다. 응용 프로그램이 데이터베이스 정의를 수정할 수있는 권한을 가지고 있다고 간주하십시오. 생산적인 응용 프로그램의 사용 권한을 가능한 한 작게 유지하려는 이유가 있습니다. 응용 프로그램에서 _any_ 수정을 수행 할 수있는 버그가있는 경우 어떻게합니까? – arkascha

+0

귀하의 특정 요구 사항에 따라 다르지 않습니다. –

+0

해당 테이블에 여러 명의 사용자가 액세스하면 어떻게 될지 고려하십시오.또한 테이블에 열을 동적으로 계속 추가하면 많은 수의 열이 추가되어 결국 테이블을 사용할 수 없게됩니다. –

답변

0

데이터베이스는 프로젝트의 초기 단계에서 만들어 져야하며 그대로 있어야합니다. 예를 들어 INSERT와 같이 쿼리를 만들 때 명명 된 열을 사용하지 않으면 시스템이 손상 될 수 있습니다.

INSERT INTO `table` VALUES('a','b','c'); 

대신

INSERT INTO `table`(column1, column2, column3,...) 
VALUES ('a', 'b', 'c',...) 

충돌 할 수있는 것보다 코드 라인이 많이 있습니다 예

를 들어

. 대부분 이름 대신 숫자 열을 기반으로하는 것입니다. DB를 변경하면 많은 문제가 발생할 수 있으며 시스템이 꽤 크면 발견하기 어려울 수 있습니다.

많은 열을 만드는 것보다 테이블 내에서 관계를 만드는 것이 더 좋습니다.

자세한 내용 데이터베이스 정규화은 "중복성과 종속성을 최소화하기 위해 관계형 데이터베이스의 필드와 테이블을 구성하는 프로세스입니다."

+5

인수가 의미가있는 것처럼 많이 들었습니다. 라이브에 대해 듣고 싶습니다. 데이터베이스가 테이블을 변경하지 않아도되는 시스템 - "데이터베이스를 생성해야하고 ... 그대로 유지"하는 것은 현실적이지 않습니다. – Pudge601

+0

현실적입니다. DB를 변경하면 프로젝트를 다시 작성해야합니다. 좋은 MVC 구조를 가지고 있다면 모델 만 보일 때가 있지만 때로는 정말 어려울 수도 있습니다. 나는 DB가 디자인 된 그대로 남아있는 많은 프로젝트를 가지고있다. 그것은 당신이 아주 좋은 db 디자인 도구, 좋은 사양, 테스트, 피드백 등을 사용해야합니다. 그것은 할 수 있습니다. – Robert

+0

그 프로젝트에서 요구 사항이 변경되지 않았습니까? 나는 당신이 진짜 고객과 함께 일하고 있는지 의문을 가지고있다 : P 그렇다. 코드는 데이터베이스 변경으로 변경되어야 할 것이다. – Pudge601

3

뭔가를 할 필요가 없으며 계획이 필요하지만 요구 사항이 변경되거나 뭔가를 잊어 버린 경우 꼭 추가하십시오 : 칼럼을 추가하십시오.

열을 추가하지 않으면 단순히 좋은 조언이 아니며 사실적이지 않습니다. 당신은 응용 프로그램이 중단되거나 bussiness의 파산 때

  • 는 정규화 된 데이터베이스를 유지
    대신에 열을 추가
    요구 사항은 바뀌지 변화하는 요구 사항에 적응

    • 할 수 있어야한다 기존 테이블을 참조하는 전체 테이블을 추가하기로 결정할 수 있습니다. 제발 하지마.사양/구현
    • 수정 실수
      우리는 모든 인간

    하지만 열을 추가하는 것을 염두에 두어야

    • 테스트는
    • 쉽게 깰 수 필요하고 기존 응용 프로그램
    • 테스트가 필요합니다.
    • 계획
    • 을 필요로 테스트를
  • 1

    질문을 이해하기 너무 가지 방법이있다,

    1. 당신이 이미 존재하는 테이블에 열을 추가하는 방법에 대한 얘기가 필요하지만 당신은있어 동적으로 애플리케이션을 동적으로 수행하는 것이 아니라 애플리케이션 코드를 업데이트 할 때 한 번 수행하는 것입니다. 배포 중. 응용 프로그램과 db 구조를 동기화 상태로 유지하는 한 괜찮습니다.
    2. 당신은 응용 프로그램, 런타임에서 어떤 조건이 발생하거나 데이터가 테이블을 추가해야하는 상태에있을 때마다 열을 추가하는 것에 대해 이야기하고 있습니다. 이것은 거의 좋은 일이 아닙니다. 변경할 필요가없고 거의 추가되지 않는 콘텐츠 형식을 만드는 경우에 따라 CMS에서 괜찮을 수도 있습니다. 그러나 대부분은 나쁜 디자인을 나타내므로 성능 및 복잡성 문제가 발생할 수 있습니다.
    +0

    특정 날짜의 출석을 모니터링하기 위해 여분의 열을 만들려고합니다. 그래서 그 목표와 관련하여 테이블을 여전히 변경하는 것입니다. 그 방법을 실제로 볼 수 없기 때문입니다. – Asher

    +0

    해당 열은 특정 날짜에 해당합니까? 아니면 특수 조건을 자세히 설명하는 다른 테이블에 대한 참조 키와 같이 모든 "특별 요일"또는 특수 조건에 대한 모든 특수 시나리오를 실제로 포함합니까? 이전의 경우 나쁜 습관입니다. 후자의 경우, 괜찮은 것 같습니다. – eis

    1

    언제 이러한 변경 작업을 수행 하시겠습니까?

    시스템의 확장 된 기능으로 인해 변경된 사항은 IMHO ok입니다.

    그러나 응용 프로그램을 사용하는 동안 변경 사항이 계속 수행되는 경우 이는 잘못된 디자인입니다. 일반적으로

    , 당신은 레이아웃을 변경할

    1. 데이터 설명 언어 (DDL)을 구분합니다. 주로 CREATE TABLE, ALTER TABLE 등입니다. 이러한 변경은 응용 프로그램의 정상 실행 중에는 설치 중에 만 수행하면 안됩니다.

    2. DB의 데이터를 조작하는 데이터 조작 및 조회 언어 (DML). 이것은 응용 프로그램이 정상적으로하는 것입니다 : INSERT, DELETE, SELECT.

    관련 문제