2013-03-05 2 views
0

내 포인트는 다음과 같습니다.
이벤트가 저장되는 MySQL DB가 있습니다. 이러한 이벤트는 다른 요일에있을 수 있습니다. 당신은 다음과 같이 말할 수 있습니다 :여러 개의 부울을 하나의 필드로 저장

Day | Active 
Mon | yes 
Tue | yes 
Wed | no 
Thu | no 
Fri | yes 
Sat | no 
Sun | no 

이제 DB에 어떻게 저장할 수 있는지 잘 모르겠습니다. 물론 거기에 몇 가지 가능성이있다 그러나 나는 모든에 단점은 내가 생각할 수있는 참조 : 그들이 Bool 타입의 7 개 필드로

  • 스토어 그들과 같은 (같은 뭔가 분야의 많은 것 같다)

    • 스토어 7 비트 숫자 (이 방법은 Integer가 필요하지만 변환하기 쉽고 가독성이 부족합니다)

    이러한 데이터는 std :: bitset에 저장 될 수 있습니다. 나는 MySQL에서 이것을 사용할 수있는 뭔가가 있다고 생각한다. 그 점을 가르쳐 주자. :)

    PS :
    나는 그것이 중요한지 모른다 : 데이터는 PHP로 제공되고 서비스된다. JSON으로 외부 세계에.

  • +0

    SET 'datatype http://dev.mysql.com/doc/refman/5.0/en/set.html – dnagirl

    답변

    3

    당신이 SET 유형 (http://dev.mysql.com/doc/refman/5.0/en/set.html)를 사용할 수 있습니다 함께 운영하는 것처럼 더 보일 것 같은 일을하고.

    +-------------+--------------------+ 
    | event_name | days    | 
    +-------------+--------------------+ 
    | some event | 'monday,friday' | 
    +-------------+--------------------+ 
    | another one | 'tuesday'   | 
    +-------------+--------------------+ 
    

    테이블의 종류에서 행을 선택하기가 용이하고 데이터베이스에 숨어 누군가를 위해 정말 읽을 수있다 : 예를 들어, 그건 당신이 테이블에 어떻게 보이는지입니다.

    +0

    +1. . . 이것은 MySQL에서 가장 좋은 접근법입니다. 세트는 다른 데이터베이스로 이식 할 수 없습니다. 그들은 또한 다른 요소의 수에 제한이 있습니다. 그러나, 그들은 주중의 날과 같은 것에 매우 잘 맞는 것처럼 보입니다. –

    +0

    나는 이것이 갈 길이라고 생각한다. JSON으로 인코딩하면 이벤트는 활성화 될 요일 목록 만 갖게됩니다. – MOnsDaR

    2

    int 아이디어를 사용해야합니다. 귀하의 PHP에서 당신은 상수로 마스크를 정의하고 어떤 플래그가 설정되어 있는지 파악 비트 연산을 사용합니다.

    그래서보다는

    myvar & 0x010 
    

    당신이 일정한

    myvar & IS_MONDAY 
    
    +0

    상수 아이디어가 좋은데 왜 SET 데이터 타입이 이미 비트 마스크를 받아 들일 수있을 때 mysql'INT'를 사용해야할까요? – dnagirl

    +0

    INT 방법은 휴대 가능한 장점이 있지만 SET는 이식 가능하지 않습니다 (Stormherz가 말했듯이). 내 눈의 단점은 가독성입니다. 또한 en/디코딩 자체를 구현해야 할 것이다 오류의 원인이 될 수 있습니다. – MOnsDaR

    0

    입력 한 내용이 주간 이벤트 만 저장하는 경우 VARCHAR 필드를 만들어 JSON 문자열로 저장하면 안됩니다. { "Mon": "예", "Tue": "예" "Wed": "no", "Thu": "no", "Fri": "yes", "Sat": "no", "Sun": "no"}

    +0

    그렇기 때문에 VARCHAR-fields에 모든 것을 저장할 수 있기 때문에 MySQL과 같은 데이터베이스를 사용하기로 결정한 경우가 아닙니다. 내가 생각할 수있는 몇 가지 단점은 검색 가능성, 나쁜 성능, 향상시키기 어려울 것입니다 ... – MOnsDaR

    관련 문제