2011-08-13 3 views
0

파일 서버에있는 이미지 파일을 관리하기 위해 데이터베이스를 구성하고 있습니다. 필자가 데이터베이스 세계에 처음 온 것은 하나의 테이블 또는 두 개를 사용하는 것 사이에서 찢어진 것이다. 고장의 원인은 다음과 같습니다.이미지 데이터베이스 - 1 테이블 또는 2 테이블?

imgId, imgTitle, imgClass, imgFamilyimgURL에 대한 열이 필요합니다.

imgURL을 다른 테이블에 넣는 것이 더 좋을지 궁금합니다. imgID을 두 개 연결하거나 하나의 테이블에 모두 함께 사용할 수 있고 잘 작동하는지 궁금합니다.

당신은 어떻게 생각하십니까?

답변

1

당신이 말한 모든 항목은 일대일 관계로 보입니다. 하나의 제목이나 이미지 ID에 대해 두 개의 서로 다른 URL을 갖게 될 것입니다.

그러나 다른 고려해야 할 사항은 필드 중 어느 것이 빈 것처럼 보이는지 여부입니다. 예를 들어, ?

CREATE TABLE `image` (
    `imgId` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `imgTitle` varchar(255) DEFAULT NULL, 
    `imgURL` varchar(255) DEFAULT NULL, 
    `imgDate` datetime DEFAULT NULL, 
    PRIMARY KEY (`imgId`), 
    KEY `date` (`imgDate`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

CREATE TABLE `imageAddendum` (
    `imgId` int(11) NOT NULL DEFAULT '0', 
    `imgClass` varchar(255) DEFAULT NULL, 
    `imgFamily` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`imgId`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

그러면 얻을 것이다 : 그런 경우라면, 가족, 당신은 별도의 테이블에 데이터를 넣고 ID를 사용하여에 연결 고려할 수 당신의 데이터는 LEFT JOIN을 사용하여 imageAddendum에 행이 없더라도 이미지의 데이터를 얻을 수 있습니다.

SELECT i.imgId, i.imgTitle, i.imgURL, i.imgDate, ia.imgClass, ia.imgFamily 
FROM image i LEFT JOIN imageAddendum ia using (imgId); 
+0

답을 고맙게 생각합니다. 매우 유익한. – stefmikhail

+1

대답은 변경되지 않습니다. 하지만 나는 그 해답을 편집했다.) 나는 당신이 모든 이미지에 대해 가질 수있는 어떤 것이라고 생각하는대로 주 '이미지'테이블에 날짜 열을 추가하고 그것을 주문하는 쿼리가 될 수 있도록 키를 추가했다. 빠릅니다. 생각할 수있는 유일한 것은 당신이 단지 날짜 또는 날짜와 시간을 원하는지 여부입니다. 내가 준 예제는 날짜와 시간이지만 분명히 당신은 날짜 만 원할 수도 있습니다. – Kenny

+0

편집 해 주셔서 감사합니다. 내 열을 만들려면 phpMyAdmin을 사용하여 임. KEY는 무엇과 관련이 있습니까? 기본 키는 이해하지만 키만 이해할 수는 없습니다. 아, 각 유형의 길이/값을 정의해야합니까? – stefmikhail

1

매우 한정된 길이의 문자열 인 이미지 URL 만 저장하는 경우 해당 열을 별도의 테이블로 분리 할 때 큰 이점은 없습니다.

이미지 자체를 저장하는 경우 (이미지를 구성하는 바이트) - 그렇다면 많은 시스템에서이 BLOB (이진 대형 객체)를 별도의 테이블에 저장하는 것이 좋습니다.

1

테이블을 분할하려는 주된 이유는 imgId와 imgURL 사이에 일대일 일치가 없을 가능성이있는 경우입니다 (동일한 URL에 대해 두 개 이상의 ID가있는 것처럼) ; 또는 하나 이상의 URL을 참조하는 동일한 ID 그러나 비어있는 URL은 괜찮습니다. 그렇지 않으면 하나의 테이블에서 문제가 없습니다.

관련 문제