2013-04-25 1 views
0

대부분의 개발자들과 마찬가지로, 나는 항상 최선의 코드와 데이터베이스 스키마를 만들기 위해 노력하고 있습니다.PHP Geek는 데이터베이스 설계 지원이 필요합니다.

그러나 필자는 필자가 만들고자하는 데이터베이스 스키마를 엔지니어링 해 보았다.

짧은 시간 내에 많은 사용자를 보유 할 수있는 웹 앱이 있습니다. 사용자는 고객, 공급자, 시스템 사용자 형태입니다. 빠르게 성장할 가능성이있는 산업 분야.

이전 스키마에서 나는 이들 테이블을 다른 테이블로 분리했습니다.

그러나 이제는 PEOPLE이라는 테이블 하나가있는 경로를 검토하려고합니다.

사람들, 연락처 세부 정보, 주거

그들은 피벗 테이블 예를 통해 관련 : PivotContacts PivotResidences

이 테이블이있을 것입니다.

내 질문은 좋은/나쁜 디자인으로 간주됩니다.? 단순한 설정을 엔지니어링하는 것 이상의 생각입니다.

사람들 테이블은 기하 급수적으로 늘어나고 많은 데이터를 보유 할 것이며, 다른 테이블은이 테이블과 관련됩니다.

나는 정말로 의견을 환영합니다.

저의 디자인은 100,000 개의 레코드로 확장되고 중간 속도를 유지할 수 있습니까? * 처음에는 1000 개의 레코드로 시작하고 1 년 후에 약 100,000 개까지 증가 할 것입니다.

+0

"많이"많이 있습니까? 수천? 수십만? 수백만? 수십억? "좋은"및 "나쁜"해결책을 어떻게 평가할 것입니까? 어떤 기준을 적용 하시겠습니까? 사람들은 의견을 원하기 때문에 질문을 끝내기 위해 투표하고 있습니다. 질문을 말하면 사실과 같은 사실로 바꿔 줄 수 있습니다. "디자인이 1 억 개의 레코드로 확장 될 것인가?"또는 "이 디자인을 사용하여 스키마의 변경 사항을 처리하려면 어떻게해야합니까?" 더 유용한 답변을 얻을 수 있습니다. –

+0

내 디자인은 100,000 개의 레코드로 확장되고 중간 속도를 유지합니다. *은 처음에는 1000 개의 레코드로 시작하며 1 년 후에 약 100,000 개까지 증가 할 것입니다. – user2007960

+0

이 질문은 http://programmers.stackexchange.com에 더 적합 할 수 있습니다. –

답변

1

로그인 할 수 있고 추적 할 수있는 사용자의 경우 (마지막 로그인, 실패한 비밀번호 재 시도) 작은 테이블과 쓰기 (데이터 읽기와 쓰기 구분)가있는 것이 가장 좋습니다.

사람들이있는 테이블은 대개 엄청난 수의 필드를 수집하는 경향이 있습니다. 다른 테이블에 보관 된 기능상의 차이점은 데이터를 깔끔하게 유지하고 공급자 테이블에 대한 인덱싱은 공급 업체 데이터의 변경과 같이 더 좋거나 더 좋은 방법 일 수 있습니다. SQL JOIN은 관리가 가능하며 SQL 뷰를 사용하여 수행 할 수 있습니다.

그래서 나는 얇은 기본 테이블 People 및 1 : 1 테이블 SupplierPeople, SystemUsingPeople 등으로 이동합니다. 그리고 테이블의 업데이트 빈도, 삽입 빈도 및 읽기 빈도를 고려하십시오.

또한 데이터베이스 스키마를 수정하고 필드를 추가하는 것을 고려하십시오.

0

솔루션의 확장성에 만 관심이있는 경우 100K 레코드는 몇 가지 중요한 가정하에 많은 수의 레코드가 아닙니다.

최신 데이터베이스 소프트웨어 (PHP 핸드라고 말하면서 MySQL을 사용한다고 가정 함) 현대 하드웨어에서 실행되는 데이터베이스는 잘 설계된 테이블을 가지고있는 한 수백만 개의 레코드가있는 데이터베이스를 쉽게 처리 할 수 ​​있습니다 레이아웃을 사용하고 인덱스를 사용할 수 있습니다.

"사람"과 "연락처"및 "거주지"를 연결하면 기본/외래 키를 사용하여 가입 할 수 있습니다. 귀하의 요구 사항에 맞게 쉽게 확장 할 수 있어야합니다.

실행중인 검색어를 고려해 볼 가치가 있습니다. 이름이나 주소, 도시 또는 마지막 연락처를 통해 '사람'을 검색 할 수 있어야합니다. 날짜 등. 이것은 당신이 많은 수의 레코드를 얻었을 때 free text searching이 필요할 수도 있음을 암시하며, where name like '%Jones%'을 사용하면 느려질 수 있습니다.

아카이빙/이력 전략 - 다른 사람의 거주 기록을 저장해야합니까 (주문했을 때 살았던 곳을 찾을 수 있도록)?

관련 문제