2012-02-13 4 views
1

아주 기본적인 웹 사이트의 mySql 데이터베이스에 하나의 테이블 만 있고 'RegisteredUsers'라는 단일 테이블에 사용자 레코드를 추가하기 위해 php/mysql 호출을 사용하고 있습니다. - 각 레코드는 다음과 같습니다각 사용자에 대해 임의의 수의 텍스트 단락을 저장해야 함

(name, member number, name of their subfolder on the server). 

나에 대한 새로운 요구 사항 - 내 각 사용자가 제로 5000 항목에서 입력 할 수 있으며, 각 항목에 대해 그들이 텍스트 설명을 입력합니다.

사용자의 '아이템'은 선사 시대의 진흙 냄비, pharoahs 중 하나가 묻힌 유물 및 '초기 인간'유물 조각 (이름, 설명)입니다. (이름, 설명) 튜플은 제한된 크기의 텍스트가됩니다. (이름 : 텍스트, 길이 = 50, 설명 : 텍스트, 길이 = 512) - 사이트는 사용자가 이름과 설명에서 매우 간결하도록합니다.

이제 각 사용자가 골동품 중 임의의 숫자 (0에서 5000까지)를 추가 할 수있게해야합니다. 데이터베이스 초보자이더라도 2 번째 테이블을 만들고 "멤버 번호"를 사용하려고합니다. 두 번째 테이블을 인덱싱 할 첫 번째 테이블.

다음과 같은 필드가있을 것이다이 두번째 테이블의 각 레코드 :

(member number, name-of-the-antique, description). 

내가 걱정하는 사용자가 함께이 2 테이블에서 이름으로 "바빌로니아 항아리를"항목을 삭제하고자하는 경우 최대 5000 개의 골동품을 사용자에게 제공합니다.

 member number=NN and name=One-Of-5000-Antiques. 

이 방법이 올바른 방법입니까?

+2

, 성능 히트에 대해 걱정하지 마십시오. 적절한 인덱싱을 사용하면 문제가되지 않습니다. –

+1

보조 테이블을 추가하여 성능에 영향을 미치지 않아도됩니다. 먼저 사용자 ID와 찾고자하는 엔트리를 반환하기 위해 사용하고자하는 식별자를 가진 단일 테이블 (table2) 만 쿼리 할 것입니다. 결국 이것은 설계된 것입니다. 다른 방법은 각 사용자마다 xml 파일을 만드는 것이지만 권장하지는 않습니다. – CBusBus

+0

오케이 - 검색 할 5000 개의 레코드가 '많은 검색'이라는 두려움이 과장된 것으로 드러났습니다. 두 가지 의견을 바탕으로, 첫 번째 테이블에서 사용자 ID로 인덱싱 된 두 번째 테이블을 만드는 것에 대한 본능은 괜찮 았습니다. 고맙습니다. – wantTheBest

답변

1

이와 같은 성능 문제에 대한 대답은 거의 항상 색인입니다. 대개 골동품 테이블에 하나 이상의 열을 추가합니다.이 열은 숫자가 자동으로 증가하는 기본 키입니다. 따라서 "Babylonia clay pot"항목을 삭제하는 대신 ID 42 인 항목을 삭제합니다.이 기본 키는 색인이 생성되며 ID로 행에 대한 액세스는 테이블 크기가 아무리 커지더라도 (즉, 분명히, 그러나 당신은 아마 그 한계에 가까이 오지 않을 것입니다). name-of-the-antique 열에도 색인을 만들 수 있지만 효율성이 떨어집니다 (그래도 인덱스가없는 것보다 빠릅니다). 여기에 인덱스에 대한

읽기 : 데이터베이스의 행 수백만/수십억에 도달하지 않는 한 http://dev.mysql.com/doc/refman/5.1/en/create-index.html

+0

감사합니다. * 정확하게 * 할일입니다. – wantTheBest

관련 문제