저는 정말 애호가입니다. 포부가 너무 커서, 내 데이터베이스를 만드는 올바른 방법을 찾아 내서 데이터베이스 변경이 클라이언트 리팩터링을 필요로하지 않고 빠르다고 생각하고 있습니다. 마치 일반적인 개발이나 DBA 용어를 잘 이해하지 못하는 것처럼 응답하십시오.MySQL 데이터베이스 디자인 관련 케이스, 열 또는 추가 테이블?
상황 : 나는 각 사용자가 평가 한 책의 수를 결정하려고했습니다.
이-Overall rating (ratings table)
-sub rating (ratings table)
-tag (book_tags table)
-list (book_lists table)
*Related tables: users, tags, lists
문제 을 : 나는 열에서 열 하위 등급 모든 등급 테이블에 두 개의 전체 등급, 각이 (추측은 다음 두이있는 경우 내가 평가 책을 고려 이것은 나쁘다, 그러나 확실하지 않다). 대신에 등급 테이블 (12 행)과 등급 테이블의 각 행이 사용자에 대한 등급 유형 인 book_ratings 테이블을 가지고 있어야합니까?
-e.g. book_ratings: id | user_id | book_id | rating_id
예라면, 어떤 50 만 책, 책 당 12 개 평가 유형, 10,000 명의 사용자 및 그 book_ratings 테이블에 50 억 행의 총이있는 경우 어떻게됩니까? 그것은 천천히 달릴 것입니까? 또 다른 고려 사항은 장래에 더 많은 하위 등급 유형을 추가 할 수 있다는 점인데, 부분적으로는 변경하는 것이 중요 할 수 있다고 생각하지만, 많은 작업이 있으므로 먼저 확인하고 싶습니다.
감사합니다.
혹시 최적화에 관한 정보를 알려 주실 수 있습니까? 뭔가 적절한 기본? 다른 날 나는 다양한 쿼리에서 사용하는 모든 필드에 인덱스를 추가 할 때까지 정말 느려졌지만 어둠 속에서 방황하는 시각 장애인처럼 완료되었습니다. 이상적으로는 장기적으로 데이터베이스가 잘 작동하면 20 만 명의 사용자와 1 백만 권의 책을 보유하고 싶습니다 (Pipe dream, but hey :). 가능한 한 미리 계획하는 방법을 알고 싶습니다. –
이러한 것들을 최적화하는 것은 약간의 흑인 예술입니다. 나는 MySQL에 익숙하지 않지만 SQL Server에서는 쿼리의 '실행 계획'을 표시 할 수 있습니다. 즉, 쿼리를 실행하기 위해 서버가 수행하는 작업의 세부 사항을 표시 할 수 있습니다. 이는 SQL Server의 경우 최적화에 매우 유용합니다. 심지어 어떤 색인을 추가해야하는지 직접적으로 제안합니다. MySQL과 비슷한 점이 있다고 가정합니다. – MiMo