Mysql 在数据库书架中创建表,其中一本书可以有多个类别

Mysql 在数据库书架中创建表,其中一本书可以有多个类别,mysql,sql,database,foreign-keys,primary-key,Mysql,Sql,Database,Foreign Keys,Primary Key,我正在创建一个书架数据库 我有一个名为BookInfo的表,其中包含有关书籍标题、类别和许多其他相关属性的信息 我有不同的名为category的表,其中包含categoryID和categoryName 问题:我想为一本书信息插入多个类别。这是可行的解决方案 解决方案是规范化数据库 如果有更多类别表,则不正确。必须使用一个类别表,然后要将其链接到BookInfo表,必须创建一个中间表,例如,命名为CategoryBook,其中中间表必须是以下字段: ID (your PK table) fiel

我正在创建一个书架数据库

我有一个名为BookInfo的表,其中包含有关书籍标题、类别和许多其他相关属性的信息

我有不同的名为category的表,其中包含categoryID和categoryName


问题:我想为一本书信息插入多个类别。这是可行的解决方案

解决方案是规范化数据库

如果有更多类别表,则不正确。必须使用一个类别表,然后要将其链接到BookInfo表,必须创建一个中间表,例如,命名为CategoryBook,其中中间表必须是以下字段:

ID (your PK table)
field PK BookInfo (as FK)
field PK Category (as FK)
或者,可以按如下方式构建中间表:

PK BookInfo (as FK)
PK Category (as FK)

其中两个上部字段是表的主键

解决方案是规范化数据库

如果有更多类别表,则不正确。必须使用一个类别表,然后要将其链接到BookInfo表,必须创建一个中间表,例如,命名为CategoryBook,其中中间表必须是以下字段:

ID (your PK table)
field PK BookInfo (as FK)
field PK Category (as FK)
或者,可以按如下方式构建中间表:

PK BookInfo (as FK)
PK Category (as FK)

上面两个字段是表的主键

您可以创建一个映射表作为“Book_Category”,它将
BookID、CategoryID,如果您想通过组合这两列来为“Book\u Category”表创建复合主键。

您可以创建一个映射表作为“Book\u Category”,它将
BookID、CategoryID,如果您想通过组合这两列为“Book\u Category”表创建复合主键。

您必须再有一个表来处理它。 或 您只能添加到BookInfo表中。 或
类别列应包含不同的categoryID

您必须有一个以上的表来处理它。 或 您只能添加到BookInfo表中。 或

类别列应包含不同类别id的

一个单独的类别表。将bookinfo id添加为类别中的外键table@noddy-但这将创建多个同名类别。我有一个场景,新书被添加到bookInfo表中,它可以有多个类别,如小说、非小说、浪漫等。您的解决方案将继续在Catalogy表中添加相同的类别。您能提供虚拟条目吗?@jarlh-正如我在问题中提到的。我已经有分类表了。如果我没有,请你提供更详细的信息以便我能理解:)一个单独的分类表。在分类中添加bookinfo id作为外键table@noddy-但这将创建多个同名类别。我有一个场景,新书被添加到bookInfo表中,它可以有多个类别,如小说、非小说、浪漫等。您的解决方案将继续在Catalogy表中添加相同的类别。您能提供虚拟条目吗?@jarlh-正如我在问题中提到的。我已经有分类表了。如果我没有,请你说得更详细些,以便我能理解:)我补充说,这可能是唯一的解决办法。我只是想确定:)是的,使用它您可以保持数据库正常化。:)还有一件事。如果我想添加具有多个版本的同一本书,我应该定义什么样的字段?请同时提供数据类型:)我认为您应该将同一本书的不同版本视为一本完整的新书。您可以创建一个单独的列作为“IsRelatedTo”,并存储以前版本的Id(主键)。如果我不清楚,请随时提问。我考虑过你的解决方案,但在这种情况下插入是不可行的。如果用户使用SQL查询直接从数据库客户端插入,则必须记住要插入的bookId号。我补充说,这可能是唯一的解决方案。我只是想确定:)是的,使用它您可以保持数据库正常化。:)还有一件事。如果我想添加具有多个版本的同一本书,我应该定义什么样的字段?请同时提供数据类型:)我认为您应该将同一本书的不同版本视为一本完整的新书。您可以创建一个单独的列作为“IsRelatedTo”,并存储以前版本的Id(主键)。如果我不清楚,请随时提问。我考虑过你的解决方案,但在这种情况下插入是不可行的。如果用户使用SQL查询直接从数据库客户端插入,则必须记住要插入的bookId号。