2013-02-08 1 views
1

확장 성 측면에서 스키마 디자인의 효율적인 방법은 무엇입니까?SQL 스키마 디자인 : 개별 테이블 또는 대량 테이블 확장 성

데이터베이스에 여러 사용자가 있고 각 사용자가 긴 텍스트, 날짜 및 고유 ID의 데이터로 구성된 개체를 사용하는 경우 (1) 사용자 열 또는 (2) 각 사용자에 대해 개체의 개별 테이블을 만드시겠습니까?

데이터베이스 정규화은 각 사용자에 대해 개별 열을 작성한다고 말하면서 몇 가지 게시물에서 대량 테이블을 사용하여 성능이 향상되는 것으로 나타났습니다.

편집 : 명확성을 위해 '요소'가 '개체'로 변경되었습니다.

+1

'요소'는 무엇을 의미합니까? 물리/화학 개념과 같은 뜻입니까? 아니면 다른 데이터 요소가 염두에 있습니까? 사용자 및 다른 데이터에 대한 어떤 유형의 정보를 저장해야합니까? 아마도 일부 테이블에'userId' 컬럼을 원할 것이지만 더 많은 정보가 필요하다. –

+0

요소는 긴 텍스트, 날짜 및 고유 ID를 보유하는 객체 일뿐입니다. 나는 그것을 더 분명하게하기 위해 나의 지위를 편집했다. –

답변

2

일반적으로 엔티티에 대한 단일 테이블을 만들고 사용자를 위해 별도의 테이블로 분할하지 않으려합니다.

이렇게하면 시스템을 유지 관리 할 수 ​​있습니다. 시스템의 쿼리는 모든 응용 프로그램에서 일관됩니다. 또한 데이터베이스가 액세스하기 위해 최적화되는 방식으로 데이터를 구조화합니다.

사용자 데이터를 별도의 테이블 또는 별도의 데이터베이스로 분할하는 몇 가지 특별한 경우가 있습니다. 이것은 사용자 요구 사항 일 수 있습니다 ("우리의 데이터는 누구와도 섞일 수 없습니다"). 다양한 백업 및 보안 정책을 지원해야 할 수도 있습니다. 그러나 일반적인 접근 방식은 엔티티 주변에 테이블을 디자인하는 것이지 사용자 주위에는 테이블을 디자인하지 않는 것입니다.

1

사용자를 식별하기위한 열이있는 단일 테이블을 갖는 것이 적절한 관계형 디자인입니다. 사용자를 추가 할 때 테이블을 추가하는 것은 매우 어지러운 것처럼 들리므로 많은 양의 사용자가 있으면 문제가 발생할 수 있습니다.

하나의 테이블이 너무 커지면 대부분의 데이터베이스 제품은 소위 파티셔닝을 지원합니다. 이는 몇 가지 기준에 따라 단일 논리 테이블을 디스크의 여러 실제 테이블로 분할 할 수있게합니다 (예 : 파티션 1의 사용자 ID 1 - 99999, 파티션 2의 100000 - 199999 및 파티션 3의 200000 - 299999에 대한 데이터가있는 3 개의 실제 테이블).

다음은 Oracle에 대한 개요입니다.

관련 문제