우리는 각각 다른 속성을 가진 약 5 개의 사용자 역할을 가진 웹 사이트에서 작업하고 있습니다. 데이터베이스 스키마의 현재 버전에서는 모든 사용자와 모든 속성을 보유하는 단일 사용자 테이블이 있습니다.서로 다른 역할을 가진 사용자를위한 최적의 테이블 구조
우리가 필요로하는 속성은 사용자 역할마다 다릅니다. 모든 사용자는 이름, 전자 메일 주소 및 암호와 같은 기본 속성을가집니다. 하지만 그 역할에 따라 속성이 다릅니다. 일부에는 소셜 미디어 링크가 있고 다른 사람에게는 인보이스 주소가 있습니다. 총 60 개의 열 (속성)이있을 수 있으며 그 중 일부만 각 사용자 역할에 사용됩니다.
전체적으로 우리는 테이블에 약 250,000 명의 사용자가있을 수 있습니다. 그 중 가장 큰 부분 (약 220,000)은 단일 사용자 역할이고 60 개 열 중 약 20 개가 사용됩니다. 다른 30,000 명의 사용자는 4 개의 다른 규칙으로 나누어지고 나머지 40 개의 열의 하위 집합을 사용합니다.
DB의 개발 관점에서 가장 좋은 데이터베이스 구조는 무엇입니까? 내 생각은 명의 사용자가 테이블 인 다음 명의 사용자가 _ 개의 중재자 인과 같은 테이블로 확장하는 것이지만 JOIN의 많은 쿼리가 생성 될 수 있습니다. 이 문제를 방지하는 방법은 VIEW를 사용하는 것입니다 만,보기가 성능을 해칠 수있는 몇 가지 (기한이 지난) 기사를 읽었습니다 (예 : http://www.mysqlperformanceblog.com/2007/08/12/mysql-view-as-performance-troublemaker/).
'완벽한'구조가 존재합니까? 어떤 제안이나 전혀 문제가되지 않으며 모든 사용자를 하나의 큰 테이블에 배치해야합니까?
답장을 보내 주셔서 감사합니다. 따라서 사용자 220,000 명에 대해 40 개의 열이 비어 있다는 사실과 상관없이 모든 사용자를 단일 테이블로 유지할 것을 권장합니다. –
220,000 행이 아무 것도 없음에 동의합니다. 40 열이 나쁜 엔지니어링이라는 데 동의합니다. EAV 모델을 사용하여 관련 사용자 데이터를 저장할 수 있습니다. 나는 테이블 아이디어에 대한 모든 사용자 그룹 데이터를 정말로 좋아하지 않는다. – wormhit
제안 해 주셔서 감사합니다. EAV는 여기 저기에있을 수있는 가능성이 있지만 여기 저기에있을 수도 있습니다. 60 개 자산에 대해 과도 할 수는 있지만 옵션으로 간주 할 것입니다. –