如何处理多个用户可能相同的用户输入数据

时间:2017-03-19 12:51:05

标签: mysql sql database data-modeling

如果我要为特定的东西创建一个市场数据库,那就让我们说一下。我会有一个store表和一个store_books表,其中包含每个商店的书籍。

现在,如果多个商店出售同一本书的概率很高,那么保留另一个包含图书相关信息的表books并将价格等放在store_book表中是个好主意吗?我还想使用另外两个表book_langslangs添加语言。

book_langs我在哪里有本地化信息,langs包含所有支持的语言。

我在这种情况下的主要关注点是,如果商店需要添加新书,它将创建books表中的第一个条目以及所有人使用的翻译。如果有人翻译错误,拼写错误,或者只是有多种翻译方式,那就说标题这会在数据库中引入混乱,因为每个人都会开始为每本书创建新条目。什么是解决此类问题的好方法?将store_books去标准化以包含标题将是一种方法,但这是首选方法吗?

请以书籍为例。有人可能会说,一本书在翻译后需要有一个特定的标题。把这本书想象成占位符,因为我现在想不出一个更好的例子。

1 个答案:

答案 0 :(得分: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)
);