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

Mysql 如何处理多个用户输入的可能相同的数据,mysql,sql,database,data-modeling,Mysql,Sql,Database,Data Modeling,如果我要为一些特定的东西创建一个市场数据库,比如说书籍。我将有一个store表和一个store\u books表,其中包含每个商店的书籍 现在,如果多家商店很有可能销售完全相同的书籍,那么在商店书籍表中保留另一个包含书籍相关信息的表书籍是否是一个好主意?我还想使用另外两个表添加语言book\u langs和langs 其中,在book_langs中,我有本地化信息,langs包含所有支持的语言 在这种情况下,我主要担心的是,如果商店需要添加新书,它将在books表中创建第一个条目,以及所有人都将

如果我要为一些特定的东西创建一个市场数据库,比如说书籍。我将有一个
store
表和一个
store\u books
表,其中包含每个商店的书籍

现在,如果多家商店很有可能销售完全相同的书籍,那么在
商店书籍
表中保留另一个包含书籍相关信息的表
书籍
是否是一个好主意?我还想使用另外两个表添加语言
book\u langs
langs

其中,在
book_langs
中,我有本地化信息,
langs
包含所有支持的语言

在这种情况下,我主要担心的是,如果商店需要添加新书,它将在
books
表中创建第一个条目,以及所有人都将使用的翻译。如果有人翻译错误,拼写错误,或者有多种翻译方法,比如说一个书名,这会给数据库带来混乱,因为每个人都会开始为每本书创建新条目。解决这类问题的好办法是什么?将
store\u books
反规范化以包含标题将是一种方法,但这是首选方法吗


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

你需要区分同一本书的“版本”。我认为,翻译是不同的版本,存储和销售版本。在您的情况下,“版本”可以只是一本书/语言的组合。因此,将其命名为
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)
);