2012-08-28 7 views
0

나는 카테고리가있는 웹 사이트 주소 목록이있는 데이터베이스가 있습니다. 테이블 필드 중에는 site_id, site_url and site_category이 있습니다. site_category에서 나는 영화, 튜토리얼 등 일반 영어로 카테고리를 가지고 있습니다 ...카테고리 이름으로 찾기 또는 추가 테이블 만들기

속도가 더 나아 졌는지 알고 싶습니다. 그것을 좋아하거나 두 개의 테이블을 가지고 :

웹 사이트 : site_id, site_url and site_category.

카테고리 :

그리고 "웹 사이트"테이블에 대한 site_categorycategory_id, category_namecategory_id을 넣어.

나는 PHP로 디렉토리를 만들고 있는데, 쿼리를 원할 때 더 나은 것이 무엇인지 알고 싶다. 감사!

답변

0

거의 모든 SQL과 마찬가지로, 그것은 실제로 여러 가지 요인에 달려 있습니다.

일반적으로 단일 테이블에 대한 쿼리는 두 테이블에 대한 쿼리보다 우수한 성능을 보입니다.

SELECT * FROM websites WHERE category_name = 'movies' ORDER BY category 
:

"CATEGORY_NAME"에 대한 상대적으로 짧은 값으로

(8 자 이하 말)와 선도적 인 열 같은 적절한 인덱스 CATEGORY_NAME, 당신은 같은 쿼리의 좋은 성과를 얻을 수 있습니다


최적의 성능을 얻으려면 category_name에 ENUM 열을 고려하십시오. 그러나 이는 category_name의 값이 열 정의의 일부로 "고정"됨을 의미합니다.

예를 들어 드롭 다운 목록 상자의 경우 distinct category_name 값 목록을 가져와야하는 경우 별도의 테이블 (예 : Categories 테이블)이 우선적으로 사용됩니다.

큰 문제는 "카테고리"가 시스템의 엔티티인지 여부입니다. 즉, 비즈니스에 중요한 개인, 장소, 사물, 개념 또는 이벤트의 "카테고리"는 고유하게 식별 될 수 있으며 정보를 저장해야합니다.

그렇다면 "엔터티"이며 별도의 테이블을 만들고 싶습니다.


더 큰 질문은 웹 사이트와 카테고리 간의 관계입니다. 웹 사이트에 둘 이상의 카테고리가있을 수 있습니까?

그렇다면 웹 사이트 및 카테고리와 관련된 관계 테이블을 생각해 볼 필요가 있습니다. 예를 들면 다음과 같습니다.

website_category (website_id, category_id) 

엔터티 간의 "엔터티"및 "관계"는 데이터베이스 디자인에서 적절하게 나타납니다. 성능을 최적화하기 위해 조정하기 전에 먼저 올바르게 이해해야합니다.

0

좋은 normalized DB 디자인을 희생해서 사이트를 미리 최적화하려는 것처럼 보입니다. 내 충고 : 두 가지 다른 테이블을 설치하십시오. 카테고리 하나. 웹 사이트를위한 다른 것. 그런 다음 카테고리 ID를 통해 두 링크를 연결하십시오. 이렇게하면 카테고리의 이름을 업데이트해야 할 경우 웹 사이트 테이블에서 여러 행을 업데이트 할 필요가 없습니다.

0

두 번째 방법이 더 강력합니다. 범주 이름을 변경하고 싶다면 한 번만 변경하면됩니다.

또한 웹 사이트에서 여러 카테고리를 사용하려는 경우 더 많은 유연성을 제공합니다.

관련 문제