>

열보다 많은 행을 정의하거나 그 반대로 성능을 저하 시키는가?

다음 상황을 고려하십시오. 상점, 음식, 가격 및 날짜가 있습니다

테이블 정의 : method 1

PriceDate       nchar(10)
   FoodID          int
   FoodPrice       int

테이블 정의 : method 2

PriceDate nchar(10) , Food_1_Price  int, Food_2_Price  int... Food_N_Price  int

  • 답변 # 1

    방법 1은 데이터베이스에 데이터를 저장하는 전통적인 방법입니다. 많은 장점이 있습니다. 특히 유연성과 쿼리 기능.

    방법 2는 여러 가지 이유로 권장하지 않습니다 :

    '가격'열의 수는 고정되어 있으므로 변경하려면 테이블 구조를 변경해야합니다.

    다른 가격의 수를 계산하는 것은 고통 스럽습니다.

    가격을 제거하는 것은 고통 스럽습니다.

    새로운 가격을 추가하는 것은 고통 스럽습니다.

    또한 각 행은 값이 없더라도 정수로 예약 된 (일반적으로) 4 바이트를 차지합니다.

    모든 값을 채운 경우 (또는 대부분), 두 번째 방법은 실제로 첫 번째 방법보다 적은 공간을 차지합니다. 일반적으로 NULL 에 공간이 사용되지 않기 때문에 열이 가변 길이 문자열 인 경우에는 더 극적입니다.  문자열.

    일부 상황에서는 방법 2가 바람직 할 수 있습니다.

    JSON 및 XML과 같은 SQL Server에 목록을 저장하는 대체 방법이 있다는 점에 유의해야합니다. 상황에 따라 가변 길이 컨텐츠를 저장하는 좋은 방법이 될 수 있습니다. SQL Server는 배열을 지원하지 않지만 그렇게하는 데이터베이스에서는 이것이 또 다른 합리적인 대안입니다.

    그러나 방법 1은 거의 기본 방법이며 대체 표현을 선택하면 개선 사항을 보여주고 싶을 것입니다.

  • 답변 # 2

    SQL 데이터베이스는 데이터 집합에서 작동합니다. 추가 열에 동일한 수준의 세부 정보를 포함하지않아야합니다 ( method 2 ). ). 이렇게하면 디자인을 생성 할 때까지 열 수를 제한하고 쿼리를 불필요하게 복잡하게 만듭니다.

    와이즈 비즈  새로운 Method 1 를 추가 할 수 있다는 점에서 훨씬 확장 가능합니다.  스키마 또는 데이터 분석 검색어를 변경하지 않고도 유형을 지정할 수 있습니다.

    Food

관련 자료

  • 이전 android - Google Pixel, Moto G4, OnePlus 6과 같은 일부 기기에서 LocationManager 및 경도-위도 null 가져 오기
  • 다음 exception - javautilloggingFileHandler를 사용하여 단일 로그 파일에 로그를 어떻게 저장합니까?