현재 사이트의 데이터베이스를 재구성하려고합니다. 지금 가지고있는 스키마가 최고가 아니기 때문에 몇 가지 제안을 듣는 것이 유용 할 것이라고 생각했습니다.위젯 구동 사이트에 대한 데이터베이스 스키마 제안
시작하려면 내 사이트는 실제로 위젯으로 구성됩니다. 각 위젯에 대해 settings
(위젯의 각 인스턴스에는 사용자 정의 설정이 있음) 테이블, common
(동일한 위젯의 인스턴스간에 공유 항목) 및 (사용자의 위젯 인스턴스 내에 저장된 데이터) 테이블이 필요합니다.). (
- 첫 번째 데이터베이스, 나는 모든 사이트 유지 보수 테이블을했다 예를 들어, 사용자, 위젯 설치, 로그, 알림 메시지 등 :
은 지금까지 나는이 데이터베이스 구성, 다음 스키마를했다) 내가 각 위젯 인스턴스를 인스턴스화 한 각 사용자에게 고유 한 ID를 할당 한 테이블을 추가합니다 (따라서 다음 열이 있습니다 :
user_id
,widget_id
및unique_id
). - 두 번째 데이터베이스에서 위젯 관련 데이터를 모두 보관했습니다. 즉, 각 도구 (
widget_id
으로 고유)에 대해 나는[widget_id]_settings
,[widget_id]_common
및[widget_id]_userdata
의 세 가지 테이블을 가지고있었습니다. 각 표에서 각 행은 사용자 위젯unique_id
을 보유하고 있습니다. 사실 여기에 모든 사용자의 데이터가 위젯에 저장되었습니다.먼저 데이터베이스 : 다음
users
테이블에서- 나는 내가
widgets
표에서user_id = 1
- 을 가지고있다
widget_id = 1
내 데이터베이스가 어떻게 작동하는지에 대한 간단한 예제를 제공합니다 내가 가진
users_widgets
테이블에user_id = 1, widget_id = 1, unique_id = 1
- 나는 내가
두 번째 데이터베이스 ... 사용자의 위젯 설정을 나타냅니다 내가 unique_id = 1, ...
이있는 1_settings
에서는
- 내가 같은 위젯의 인스턴스간에 공유 된 데이터를 나타내는 여러 행이있는
1_common
에서 - (여기에 사용자 별 데이터가 없습니다.)
1_userdata
에는unique_id = 1, ...
이 있는데 ...은 사용자의 위젯 데이터를 나타냅니다. 여기서 중요한주의 사항이 테이블
당신이 거친 내 데이터베이스 스키마 이해 희망 (위젯 예를 들어, 예를 들어 작업 위젯를 들어, 사용자가 가질 수있는 몇 가지 작업) 같은 unique_id
으로 여러 행을 포함 할 수 있다는 것이다.
이제는 '클리너 (cleaner)'스키마를 개발하고자하므로 2 개의 데이터베이스를 가질 필요가 없으며 애플리케이션마다 매번 전환해야합니다. 만약 내가 두 번째 데이터베이스 (1_settings, 2_settings, ..., n_settings)에 테이블을 dinamically 생성하지 않는 방법을 찾으면 좋을 것입니다.
이 작업을 수행하는 더 나은 방법을 제안하는 데 많은 노력을 기울여야합니다. 대단히 감사드립니다!
편집 : 내 데이터베이스를 재구성 할 때 MongoDB 또는 CouchDB와 같은 데이터베이스를 사용할 수 있습니까? 내 말은, 두 번째 데이터베이스의 경우 고정 된 스키마가없는 것이 더 좋을 것입니다. 또한 전통적인 SQL과 NoSQL은 어떻게 동일한 사이트에서 작동합니까?
위대한 사용자로부터 또 다른 위대한 제안! :) 당신의 제안은 상당히 견고하고 확장 성이 있습니다.이렇게하면 첫 번째 데이터베이스에 3 개의 테이블을 통합 할 때 두 번째 데이터베이스가 필요하지 않을 것입니다. 내 질문은, 만약 내가 1000 위젯 인스턴스, 예를 들어, 5 개의 다른 설정과 각 위젯 - 즉, 내'widget_instance_settings' 5000 행에있다 의미합니다. 그리고 이것은 사용자가 생성하는 모든 위젯 인스턴스에 따라 증가합니다. MySQL은 한 테이블 내에서 이렇게 많은 양의 데이터를 처리 할 수 있습니까? – linkyndy
또한 언급 한 스키마를 사용하면 데이터베이스 테이블 내에서 'n'행으로 구성된 특정 위젯 인스턴스를 처리하기가 Cake (이 프레임 워크에서이 프로젝트를 개발할 때)에서 쉽게 수행 할 수 있습니까? (여기서 'n'은 위젯이 가질 수있는 설정 수입니다). 그리고 위젯을 공유 할 계획입니다 (즉, 한 사용자의 위젯 인스턴스에서 모든 데이터를 다른 사용자의 인스턴스로 복사). 달성하기가 쉬운가? 당신의 도움을 주셔서 대단히 감사합니다. – linkyndy
확실히. 'widget_instance_id' 칼럼과'key' 칼럼까지도 INDEX로 지정하십시오. 이 스키마를 CakePHP와 함께 사용하면 문제가 없어야합니다. – RabidFire