응용 프로그램이 파티셔닝 수단으로 데이터베이스 테이블을 동적으로 생성하는 것이 합리적입니까?파티셔닝 수단으로 테이블을 동적으로 생성 : OK 또는 나쁜 습관?
예를 들어, 각 행의 소유자를 식별하는 "userID"열이있는 큰 테이블 "위젯"이 있다고 가정 해보십시오. 이 테이블이 극단적으로 커지는 경향이 있다면, 응용 프로그램에 새로운 사용자마다 "widgets_ {username}"이라는 새 테이블을 생성하게하는 것이 합리적입니까? 응용 프로그램은 한 번에 단일 사용자에게 속한 위젯 만 쿼리해야한다고 가정합니다 (즉, 이러한 사용자 위젯 테이블을 함께 시도하거나 조인 할 필요가 없음).
이렇게하면 큰 테이블 하나를 더 쉽게 관리 할 수있는 덩어리로 분해 할 수 있지만 이는 훌륭한 해결책이 아닙니다. 내 생각에 데이터베이스 스키마는 응용 프로그램이 작성 될 때 정의되어야하며 런타임 데이터는 추가 테이블이 아닌 행으로 저장되어야합니다.
보다 일반적인 질문으로 런타임에 데이터베이스 스키마를 수정하는 것이 좋습니다.
편집 :이 질문은 대부분 가설입니다. 나는 런타임에 테이블을 만드는 것이 의미가 없다는 것을 꽤 잘 알고 있었다. 즉, 우리는 응용 프로그램에서 수백만 행의 테이블을 가지고 있다고합니다. SELECT는 훌륭하게 수행되지만 특정 사용자가 소유 한 모든 행을 삭제하는 것과 같이 시간이 걸릴 수 있습니다. 기본적으로 나는 각 사용자에 대한 테이블을 동적으로 생성하는 것이 내가 부탁 받았을 때 이해가되지 않는 견고한 추리를 찾고있다.
왜 widgets-username 테이블이 많은 데이터베이스가 "username"이라는 추가 열이있는 테이블 하나보다 낫다고 생각하십니까? 올바른 인덱스와 함께 후자를 사용하십시오. – Konerak
왜 귀찮게합니까? SELECT * 위젯에서 어디 userID = 'Fulano'실행하는 데 너무 오래 걸립니까? –
"쉽게 관리"한다는 것은 무엇을 의미합니까? 테이블 쿼리 나 아카이브 같은 작업에 대해 이야기하고 있습니까? –