2009-07-18 5 views
0

저는 MySQL을 사용하여 PHP의 매장 애플리케이션을 개발 중입니다. 현재 4 개의 테이블에 데이터를 저장하고 있습니다. 하나는 제품 라인, 다른 하나는 제품 라인의 특정 제품, 다른 하나는 제품 이미지, 다른 하나는 특정 제품에 연결된 이미지를 지정하는 테이블입니다. 각 특정 제품은 하나의 제품 라인에 속하며 각 제품 이미지는 여러 특정 제품에 속할 수 있으며 각 특정 제품에는 여러 이미지가있을 수 있습니다. 내 표는 다음과 같습니다.온라인 상점을위한 제품 및 제품 이미지 데이터는 어떻게 저장해야합니까?

ProductLines 
    id, name, description, etc. 
SpecificProducts 
    productLineID 
    id, color, size, etc. 
ProductImageLinks 
    specificProductID 
    imageID 
Images 
    id, imageFileLocation, name, etc. 

이 방법으로 잘 작동하지만 검색 목적으로는 그리 효율적이지 않은 것처럼 보입니다.

예를 들어 각 제품 라인을 해당 제품 라인에서 임의로 선택한 이미지의 축소판과 함께 나열하는 페이지가 있습니다. 이렇게하려면 먼저 모든 제품 라인의 목록을 데이터베이스에 쿼리 한 다음 각 제품 라인에 대한 별도의 쿼리를 수행하여 이미지가있는 특정 제품을 모두 가져 와서 그 중 하나를 선택한 다음 다시 쿼리해야합니다 이미지를 얻기 위해서.

제가 생각한 또 다른 가능성은 내가보고있는 모든 제품 라인을 얻는 것, 두 번째 쿼리는 모든 제품 라인을위한 모든 특정 제품을 얻는 것, 세 번째 쿼리는 모든 제품 라인을 가져 오는 것입니다. 어떤 이미지가 어떤 특정 제품에 링크되어 있는지를 지정하는 이미지 링크, 그리고 모든 이미지를 얻기위한 네 번째 쿼리. 조회 수가 줄어들어 조금 더 빨라지 겠지만, PHP가 제품 라인과 제품 및 이미지 간의 연결을 파악하는 데 많은 시간을 할애 할 수 있습니다. 느린 수 있습니다.

내 질문에이 데이터를 저장하는 더 좋은 방법이 있습니까? 이미 가지고있는 데이터베이스를 기반으로 검색하는 더 좋은 방법은 없을까요? 아니면 실제로 최선의 방법이라고 생각했던 두 가지 옵션 중 하나입니까?

편집 : 실제로 이미지 파일을 데이터베이스에 저장하지 않습니다. 이미지 파일은 파일 시스템에 저장됩니다. 데이터베이스의 내 "이미지"테이블은 이미지 제목, 대체 텍스트 등과 같은 유용한 정보와 함께 이미지 파일의 위치를 ​​저장합니다.

+0

언제 이미지를 검색하나요? 브라우저가 요청할 때까지 가져올 필요가 없습니다. 따라서 이미지 가져 오기는 해당 페이지를 구축하는 과정에 포함되어서는 안됩니다. html에 링크 만 삽입해야합니다. – nos

+0

"image"로 말하면 방금 이미지 용 데이터 구성을 의미했습니다. . 이미지 파일의 URL을 알려주는 데이터베이스의 데이터뿐 아니라 대체 텍스트와 같은 유용한 정보를 검색합니다. 죄송합니다. – Robert

답변

2

예 - 한 번에 모든 정보를 검색하는 단일 쿼리 만 작성하면됩니다. .

나는 이것에 약간 녹슬지 만 mysql 참조에서 쿼리를 조회 할 수 있습니다.

  1. a를 해당 키에 이러한 테이블을 조인 쿼리
  2. 당신이 랜드 (가 다음 순서를 특정 쿼리에 대한 이미지를 검색하고 하위 쿼리에서 첫 번째 항목을 선택해야합니다)를 생성하고 첫 번째 선택 .

이것은 단 하나의 쿼리에서 수행 할 수 있습니다. 비록 그것이 가능하지 않더라도 당신은 언제나 가독성을 높이기 위해 쿼리를 구성하는 더 좋은 방법 인보기를 항상 만들 수 있습니다. 즉, 쿼리 결과를 반환하는 대신 첫 번째 쿼리에 해당하는 뷰를 작성하면됩니다. 그런 다음 첫 번째 쿼리 결과에 대한 두 번째 쿼리 실행에 해당하는 뷰를 만듭니다.이 뷰는 뷰에서 작동하지 않습니다. 등등. 그런 다음 실제 조회는 최종보기에서 검색하여 한 번에 수행 할 수 있습니다.

+0

그렇다면 내가 한 가지 큰 쿼리의 결과에서 각 행에는 제품 라인, 해당 라인의 특정 제품 및 특정 제품의 축소 이미지에 필요한 모든 열이 있어야합니까? – Robert

0

mysql 데이터베이스에 이미지를 저장할 때 설정 했습니까?

내 비슷한 응용 프로그램에서 나는 단순히 imagesize가 /images/productimages/imagesize/productid.jpg에 저장되었습니다. 여기서 imagesize는 다른 축소판 크기 및 productid에 대해 "작음", "큰"등입니다.jpg는 SpecificProducts 테이블의 ID입니다.

+0

이전의 비슷한 프로젝트에서 그렇게 했었지만이 기술은 특정 제품과 이미지 간의 다 대다 관계를 처리 할 수 ​​없습니다. – Robert

+0

그냥 파일 시스템의 파일에 대한 포인터 인 데이터베이스에 이미지 파일을 저장하지 않을 것입니다. – Robert

1

데이터베이스 설계는 상당히 견고하고 (표준적인) 설계입니다. 일부 쿼리를 저장하기 위해 1 : 1 관계가있는 한 ProductImageLinks 및 Images 테이블을 결합 할 수 있습니다.

  1. 은 데이터베이스라는 ProductLineImages에 새 테이블을 만들기 : 당신의 제품 라인 이미지 검색에 관해서

    , 당신은 크게 필요한 쿼리 수를 줄일 몇 가지 옵션이있다. 관련 제품에서 임의로 이미지를 선택하는 대신 무작위로 선택할 수있는 이미지 세트를로드하십시오. 이 방법은 역동적이지는 않지만 가장 효율적인 방법입니다.
  2. 당신이 설명한 모든 것을 하나의 (그러나 # 1보다 효율적이지는 않은) 쿼리로 할 수 있습니다.
+0

+1 - ProductImageLinks 테이블이 필요없는 것 같습니다 –

+0

1 : 1 관계가 아닙니다. 각 이미지는 여러 특정 제품에 링크 될 수 있으며 각 특정 제품은 여러 이미지에 링크 될 수 있습니다. 예를 들어, 사진에 두 개의 객체가 있거나 동일한 제품의 여러 사진이있을 수 있습니다. – Robert

관련 문제