문제

나는 CJ 날짜를 읽고있다 SQL 및 관계형 이론 : 정확한 SQL 코드 작성 방법, 그리고 그는 위치 쿼리가 나쁘다는 경우를 만듭니다. INSERT:

INSERT INTO t VALUES (1, 2, 3)

대신 다음과 같은 속성 기반 쿼리를 사용해야합니다.

INSERT INTO t (one, two, three) VALUES (1, 2, 3)

이제 튜플 (행)이 변하지 않은 속성 세트 (열)이기 때문에 첫 번째 쿼리가 관계형 모델과 일치하지 않는다는 것을 이해합니다. 첫 번째 쿼리의 피해가 어디에 있는지 이해하는 데 어려움을 겪고 있습니다. 누군가 나에게 이것을 설명 할 수 있습니까?

도움이 되었습니까?

해결책

첫 번째 쿼리는 테이블 스키마가 변경 될 때마다 거의 나뉩니다. 두 번째 쿼리는 열을 그대로 유지하고 기본이없는 열을 추가하지 않는 스키마 변경을 수용합니다.

하는 사람들 SELECT * 쿼리 다음에 관심이있는 값을 추출하기위한 위치 표기법에 의존합니다. 소프트웨어 유지 보수 수퍼 빌린 같은 이유로.

다른 팁

열 순서대로 ~이다 스키마에서 정의되면 일반적으로 중요하지 않기 때문에 중요하지 않아야합니다. 개념적으로 중요한.

또한 첫 번째 버전을 읽는 사람은 스키마를 참조하여 값의 의미를 찾아야한다는 것을 의미합니다. 틀림없이 이것은 대부분의 프로그래밍 언어에서 위치 인수를 사용하는 것과 같습니다. 그러나 어떻게 든 SQL 은이 점에서 약간 다르게 느껴집니다. 두 번째 버전을 훨씬 쉽게 이해할 수 있습니다 (열 이름이 합리적이라고 가정).

나는 이와 관련하여 이론적 개념에 대해 정말로 신경 쓰지 않는다 (실제로, 테이블. 가지고 있습니다 정의 된 열 순서). 내가 두 번째를 선호하는 주된 이유는 추상화 층이 추가되었습니다. 쿼리를 망치지 않고 테이블의 열을 수정할 수 있습니다.

SQL 쿼리가 표의 정확한 레이아웃에 최대한 적게 의존하도록해야합니다.

첫 번째 쿼리는 테이블에 3 개의 필드 만 있고 그 순서대로 의존합니다. 테이블로의 변경 사항은 쿼리가 깨질 것입니다.

두 번째 쿼리는 테이블에 3 개의 장석이있는 것만 의존하며 필드의 순서는 관련이 없습니다. 쿼리를 끊지 않고 테이블의 필드 순서를 변경할 수 있으며, 널 값을 허용하거나 기본값이있는 한 필드를 추가 할 수도 있습니다.

테이블 레이아웃을 자주 재배치하지는 않지만 테이블에 더 많은 필드를 추가하는 것이 일반적입니다.

또한 두 번째 쿼리는 더 읽을 수 있습니다. 쿼리 자체에서 레코드에 넣은 값이 무엇을 의미하는지 알 수 있습니다.

아직 언급되지 않은 것은 종종 PK로 대리 키를 가질 것이라는 점입니다. auto_increment (또는 비슷한 것) 값을 할당합니다. 첫 번째는 지정해야합니다 무엇 거기 - 그러나 사용하지 않아야하는지 어떤 가치를 지정할 수 있습니까? NULL 옵션 일 수 있지만 PK가 NOT NULL.

그러나 그 외에도 "특정 스키마에 잠겨"전체가 훨씬 더 중요한 이유입니다.

SQL은 삽입 및 선택 문의 열의 이름을 지정하기위한 구문을 제공합니다. 당신은 이것을 사용해야합니다.

  • 쿼리는 열 순서의 변경에 안정적이므로 유지 보수가 적은 작업이 필요합니다.
  • 칼럼 주문은 사람들이 생각하는 방식에 더 잘 매료되므로 더 읽기 쉽습니다. 열을 두 번째 열이 아닌 "이름"열로 생각하는 것이 더 명확합니다.

업데이트와 같은 구문을 사용하는 것이 좋습니다.

INSERT t SET one = 1 , two = 2 , three = 3

두 예보다 읽고 유지하기가 훨씬 쉽습니다.

장기적으로, 열에 열에 열을 추가하면 열 목록을 명시 적으로 지정하지 않으면 삽입물이 작동하지 않습니다. 누군가가 열 순서를 변경하면 삽입물이 값 삽입을 잘못된 열에 조용히 성공시킬 수 있습니다.

하나 더 추가 할 것입니다. 두 번째 쿼리는 테이블이 변경되기 전에도 오류가 발생하지 않습니다. 내가 왜 그렇게 말합니까? seocnd 양식을 사용하여 쿼리를 작성할 때 할 수있는 (그리고 쿼리를 작성해야 함) 시각적으로 삽입 테이블의 열과 값 절의 데이터가 실제로 시작할 수있는 올바른 순서에 있는지 확인하십시오. 그렇지 않으면 우연히 우발적으로 사회 보장 번호를 명예 분야에 넣고 연설을하기 위해 만들어야 할 금액 대신 SSN에게 SSN을 지불하게 될 수 있습니다 (예 : 예를 들어 무작위로 선택되지 않음, 실제로 우리가 실제로 그 덕분에 그것을 잡기 전에 잡았습니다. 육안 검사!).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top