2016-12-09 1 views
0

데이터베이스를 디자인하고 있는데 다음과 같은 작업을 수행하는 가장 좋은 방법은 무엇인지 알고 싶습니다.데이터베이스 디자인 : 단일 항목에 대한 여러 상태

데이터베이스가 항목을 저장합니다. 각 항목은 여러 상태 일 수 있습니다

  1. 검증
  2. 인증 됨 내용에 대한
  3. 보류 보류.
  4. 등등

을 삭제 ... 그리고.

이러한 상태는 동시에 켜져있을 수 있습니다. 예를 들어 유효성 검사와 콘텐츠 대기 중 보류 중일 수 있습니다.

또한 영국, 브라질, 중국의 3 개국이 있다고 가정 할 때마다 각 항목의 국가가 달라집니다.

그래서 내가 항목의 해당 속성에 X가 : - 유효성 검사 (예/아니오)

  • 보류 (브라질) -

    • (UK) 확인을 위해 보류를 (예/아니오)
    • 확인을 위해 대기중인 (중국) - (예/아니오)
    • 인증 됨 (영국) - (예/아니오)
    • ...

    항목의 상태가 커지면 조합 수가 지수 적으로 증가합니다.

    • status_uk : 0000
    • status_br :

      tbl_item

      : 0101
    • (+ 컨텐츠를 기다리는 검증에 출원 중)

      내 생각은 같은 테이블을 가지고, 바이너리 상태를 사용하는 것입니다 status_cn : 0001 (유효성 확인을 위해 보류 중)

    SQL에서 이진 연산자를 사용하십시오.

    나를위한 조언이 있다면 좋을 것입니다!

    감사합니다.

  • 답변

    0

    ItemCountries 테이블을 원할 것 같습니다. 예 :

    create table ItemCountries (
        ItemCountriesId int auto_increment primary key, 
        ItemId int not null, 
        CountryId int not null, 
        Status ?, 
        foreign key (ItemId) references Items(ItemId), 
        foreign key (CountryId) references Countries(CountryId) 
        unique (ItemId, CountryId) 
    ); 
    

    나는 Status 열을 남겼습니다. 아마 varchar(255)으로 만들고 응용 프로그램의 값을 제어 할 것입니다. (다른 데이터베이스에서는 check 제약 조건을 사용 하겠지만 MySQL에서는 적용하지 않습니다.)

    유효한 상태에 대한 참조 테이블을 포함한 다른 옵션이 있습니다 (상태 값을 다른 언어로 변환해야하는 경우 매우 중요합니다. 예를 들어 enum).

    관련 문제