2017-03-19 3 views
0

특정 마켓 플레이스 데이터베이스를 만들려면 책에 대해 말하십시오. store 테이블과 store_books 테이블은 각 상점의 책을 포함하게됩니다.여러 사용자가 동일하게 입력 할 수있는 사용자 입력 데이터를 처리하는 방법

정확히 같은 책을 판매하는 상점이 여러 개있을 가능성이 높은 경우 store_book 테이블에 책 관련 정보 및 가격을 포함하는 다른 테이블 books을 보관하는 것이 좋습니다. 또 다른 두 테이블 book_langslangs을 사용하여 언어를 추가하고 싶습니다.

여기에서 book_langs 나는 현지화 된 정보가 있으며 langs에는 지원되는 모든 언어가 들어 있습니다.

이 경우 나의 주요 관심사는 상점에서 새 책을 추가해야 할 경우 books 테이블의 첫 번째 항목과 모든 사람이 사용하는 모든 번역을 작성한다는 것입니다. 다른 사람이 잘못 번역하면 잘못 철자가 있거나 단순히 여러 가지 번역 방법이있는 경우 모두가 각 책에 대한 새로운 항목을 만들기 시작하므로 데이터베이스에 혼란을 초래할 수 있습니다. 그런 종류의 문제를 푸는 좋은 방법은 무엇일까요? 제목을 포함하도록 store_books의 정규화를 취소하는 것이 하나의 접근 방법이지만 바람직한 접근 방법입니까?

책을 예로 들어주세요. 책이 번역 된 이후 특정 제목이 필요하다고 주장 할 수 있습니다. 지금은 더 좋은 예를 생각할 수 없으므로 책을 자리 표시 자라고 생각하십시오.

답변

1

같은 책의 "판"을 구별해야합니다. 나는 번역이 다르다는 것을 주장 할 것이다 그리고 판매 된 를 저장하십시오. 귀하의 경우, "판"은 단순히 책/언어 조합 일 수 있습니다. 따라서 BookLanguageId으로 전화하십시오. 다음 엔터티 같은

뭔가 :

create table Books (
    BookId b int auto_increment primary key, 
    Title varchar(255), 
    . . . 
); 

create table BookLanguages (
    BookLanguageId int auto_increment primary key, 
    BookId int not null, 
    LanguageId int not null, 
    IsPrimaryLanguage tinyint, 
    . . . 
    foreign key (BookId) references Books(BookId), 
    foreign key (LanguageId) references Languages(LanguageId) 
); 


create table StoreBookLanguages (
    StoreBookLanguageId int auto_increment primary key, 
    StoreId not null, 
    BookLanguageId int not null, 
    DateArrived int, 
    foreign key (StoreId) references Stores(StoreId), 
    foreign key (BookLanguageId) references BookLanguages(BookLanguageId) 
); 
관련 문제