2012-02-09 2 views
1

특정 멤버가 이미지를 업로드 할 수있는 스키마를 설계 중입니다 (권한에 따라 다름). varbinary(max) 열을 사용하여이 작업을 수행 할 계획입니다.SQL Server에서 큰 Nullable 열의 영향

다음 두 디자인간에 고려해야 할 저장 및 성능 관련 영향은 무엇입니까 (후자가 1 대 다수인지는 분명하지 않지만 충분히 쉽게 제한 될 수 있음).

  • 입력 가능 varbinary(max) 열이있는 단일 테이블
  • 두 테이블, Members 하나, 추가 왼쪽 성능이 저하됩니다 참여하지만 분명히 Pictures

에 대한 두 번째 나는 하나의 테이블 접근 방식을 사용하는 경우 이것은 더 많은 스토리지 공간을 필요로 할 것입니다 (나는 보통 스토리지 크기를 성능보다 너무 많이 고려하지 않지만이 프로젝트의 경우 호스팅 제공 업체와의 제한이 상당히 큼).

+0

이미지를 DB에 저장 하시겠습니까? – vulkanino

+0

현재 예. 하드 드라이브에 대한 쓰기 권한이 필요하지 않으므로 (내 서버가 아니기 때문에 어떤 권한이 있는지 확신 할 수 없습니다) 나중에 마이그레이션을 더 쉽게 수행 할 수 있습니다. – Liath

+0

그렇게하기 전에 두 번 이상 생각할 것입니다. 어쨌든, 두 테이블이 올바른 선택입니다. 나중에 'user' 테이블에 정보를 추가하고 싶다면 업로드하는 모든 이미지에 대해 해당 데이터를 복제하십시오. 나는 performace에 대해 걱정하지 않을 것이다, 그것은 db 직업이다. – vulkanino

답변

1

동일한 테이블에 이미지를 저장하십시오. zillions의 회원이 있고 그 중 10 명이 사진을 가지고있는 경우를 제외하고는 별도의 테이블에 저장하거나 저장하는 속도가 전혀 없습니다.

는 NULL 값이있는 경우 SQL Server가 모두 널 (NULL) 변수 열을 저장하지 않기 때문에 - 당신도 속도 장점은 이미지가 말 (충분히 큰 경우 FILESTREAM 열을 사용하는 것이 좋습니다 두 개의 테이블 디자인

을 비교 얻을 수 있습니다 - 1 Mb 이상). 이미지를 파일로 저장하여 읽기 - 쓰기 작업 속도를 높이지만 백업 일관성을 유지할 수 있습니다.

+0

소스를 제공 할 수 있습니까?당신과 Vulkanino는 상충되는 충고를했고 어떤 것이 맞는지 모르겠습니다. – Liath

+0

@Liath 근원? null 값을 가진 NULLABLE 열은 공백을 사용하지 않습니까? –

+0

@Liath http://stackoverflow.com/questions/3731172/how-much-size-null-value-takes-in-sql-server –

0

더 나은 옵션 ... 디스크에 이미지를 저장하고 파일 이름 (경로)과 함께 null 테이블을 Members 테이블에 추가하십시오.

+0

더 좋지는 않지만 사용할 수 있습니다. 일관된 백업을 원한다면 실패 할 수도 있습니다. 그리고 FILESTREAM BLOBS는 큰 파일에 대한 규칙입니다 - 성능과 일관성 모두 –

+0

+1 백업 일관성이 최우선 순위가 아닐 때 이미지를 저장하는 일반적인 방법 – Andomar

2

NULL이 가능한 가변 길이의 변수 가변 길이는 테이블에서 공백을 사용하지 않습니다.

당신이 BLOB를 저장 할 때, 그것은 아마도 크기에 따라 행 또는 행 외부 저장 등이 1 여부 또는이 개 테이블

별도의 테이블이있는 경우

, 당신은 추가 좋겠 적용 회원의 기본 키를 보관해야합니다 (또는 회원 키에는 자체 키가 있습니다). 그러나 이것은 사진 크기에 비해 사소한 것입니다.

개인적으로, 나는 하나의 테이블을 사용하여 간단하게 유지할 것입니다.
FILESTREAM을 사용하고 싶지 않거나 BLOB를 가진 다른 파일 그룹을 사용하지 않는 한 말입니다.

관련 문제