2010-04-04 5 views
1

다른 유형의 미디어를 나타낼 수있는 Medium이라는 클래스가 있다고 가정 해 보겠습니다. 예를 들어 :데이터베이스에서 클래스 상수 (비트 마스크로 사용) 저장 중입니까?

  • 업로드 한 동영상
  • 포함 된 비디오
  • 업로드 된 이미지
  • 삽입 영상

I는 다음과 같이 contants 이러한 유형의 표현 :

class MediumAbstract 
{ 
    const UPLOAD  = 0x0001; 
    const EMBED  = 0x0010; 
    const VIDEO  = 0x0100; 
    const IMAGE  = 0x1000; 

    const VIDEO_UPLOAD = 0x0101; // for convenience 
    const VIDEO_EMBED = 0x0110; // for convenience 
    const IMAGE_UPLOAD = 0x1001; // for convenience 
    const IMAGE_EMBED = 0x1010; // for convenience 

    const ALL   = 0x1111; // for convenience 
} 

따라서 , 결합 된 검색을하기가 쉽습니다. 같은과 (추상) 저장소에 그들에 채널 :

{ 
    public function findAllByType($type) 
    { 
     ... 
    } 
} 

$media = $repo->findAllByType(MediumAbstract::VIDEO | MediumAbstract::IMAGE_UPLOAD); 
// or 
$media = $repo->findAllByType(MediumAbstract::ALL); 
// etc.. 

어떻게 데이터베이스와 같은 콘크리트 저장소에 이러한 상수 값을 사용하여에 대해 어떻게 생각하세요? 괜찮 니? 또는 데이터베이스에서 의미있는 데이터로 대체해야합니까?

Table medium: 

| id |    type | location | etc.. 
------------------------------------------------- 
| 1 | use constants here? | /some/path | etc.. 

(물론 난 단지 의미있는 상수 사용됩니다 : VIDEO_UPLOAD, VIDEO_EMBED, IMAGE_UPLOAD 및 IMAGE_EMBED) MySQL의에서

+1

정말 커뮤니티 위키에 관한 질문이 아닙니다. –

+0

+1 Pekka. 커뮤니티 위키는 나를 대답하지 못하게합니다. 나는 질문에 답하는 것을 괴롭히는 평판 포인트를 얻는 것을 좋아합니다. –

+0

나는 일종의 주관적인 질문을한다. 그러나 나는 그것을 바꿀 것입니다 ... 그리고 지역 사회가 그것에 대해 어떻게 느끼는지보십시오. :) –

답변

0

을, 나는 SET를 사용합니다. 그들은 가장 작은 데이터 양을 사용하지만, 당신에게 값의 미리 정의 된 일반 텍스트 표현 제공 내부적으로 저장됩니다 SELECT * FROM table WHERE type IN ("UPLOAD", "EMBED")

당신이 것을 사용하는 경우 : 당신은 데이터베이스 쿼리를 적용 할 수 있습니다

SET('UPLOAD','EMBED','VIDEO','IMAGE'); // costs 1 byte 

Documentation on SET

을 , 상수를 문자열 값과 일치시키는 것이 더 쉬울 것입니다 :

class MediumAbstract 
{ 
    const UPLOAD  = "UPLOAD"; 
    const EMBED  = "EMBED"; 
    const VIDEO  = "VIDEO"; 
    const IMAGE  = "IMAGE"; 

지금 당장 : 0x0001은 비트 마스크가 아니지만 16 진수 값이 아닙니까? More here)

+2

안녕 Pekka, 답변 주셔서 감사합니다. 좋은 내 데이터베이스를 선택하십시오. 그래서 내가 태그를 추가했습니다. 16 진수 표현을 여전히 비트 마스크로 간주됩니다 믿습니다. (비록 완전히 확실하지는 않지만) 비트 연산을 허용합니다 .16 진수 값은 더 명확한 값을 보여줍니다. 이에 대해서는 http://stackoverflow.com/questions/243712/why-use-hex도 참조하십시오. 하지만 비트 연산을 허용하지 않습니다. 그리고 비트 연산을 사용하는 것을 좋아합니다. 그래서 내가 질문했습니다. –

관련 문제