如果我要为特定的东西创建一个市场数据库,那就让我们说一下。我会有一个store
表和一个store_books
表,其中包含每个商店的书籍。
现在,如果多个商店出售同一本书的概率很高,那么保留另一个包含图书相关信息的表books
并将价格等放在store_book
表中是个好主意吗?我还想使用另外两个表book_langs
和langs
添加语言。
book_langs
我在哪里有本地化信息,langs
包含所有支持的语言。
我在这种情况下的主要关注点是,如果商店需要添加新书,它将创建books
表中的第一个条目以及所有人使用的翻译。如果有人翻译错误,拼写错误,或者只是有多种翻译方式,那就说标题这会在数据库中引入混乱,因为每个人都会开始为每本书创建新条目。什么是解决此类问题的好方法?将store_books
去标准化以包含标题将是一种方法,但这是首选方法吗?
请以书籍为例。有人可能会说,一本书在翻译后需要有一个特定的标题。把这本书想象成占位符,因为我现在想不出一个更好的例子。
答案 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)
);