Database design 在这种情况下,使用一个表而不是多个表有意义吗?

Database design 在这种情况下,使用一个表而不是多个表有意义吗?,database-design,relational-database,Database Design,Relational Database,比如说,我在跟踪书籍、汽车、动物等信息,然后每个信息都有分类属性,比如类型(恐怖、喜剧等)、类型(suv、掀背车等)、类别(哺乳动物等)。我的直觉告诉我,我会有3个表格,比如书籍类型、汽车类型、动物类来存储这些 但是,如果只使用1个分类表,并且有3个字段:id、classification\u name、classification\u option,并在我的书籍、汽车和动物表中引用它,会有什么情况或理由吗 甚至有两个表:带有id和名称的分类表(类型、类型、类别)和带有id、分类id和名称的分类

比如说,我在跟踪书籍、汽车、动物等信息,然后每个信息都有分类属性,比如类型(恐怖、喜剧等)、类型(suv、掀背车等)、类别(哺乳动物等)。我的直觉告诉我,我会有3个表格,比如书籍类型、汽车类型、动物类来存储这些

但是,如果只使用1个分类表,并且有3个字段:id、classification\u name、classification\u option,并在我的书籍、汽车和动物表中引用它,会有什么情况或理由吗


甚至有两个表:带有id和名称的分类表(类型、类型、类别)和带有id、分类id和名称的分类选项表(恐怖、suv、哺乳动物等)

最好为每种类型创建一个表:假设明年你想为
汽车添加一个名为“make”或“model”的属性/列。通过为每种类型创建单独的表格,您将能够仅将此列添加到
汽车
,而不会影响
书籍
动物


保持每种类型的结构模块化和具体化(原则称为:关注点分离)将使您的代码在将来更易于阅读、维护和测试

你的直觉告诉我们一件正确的事情:从逻辑和物理设计的角度来看,三张桌子更好;数据库支持数据完整性,查询更简单


但是,当您的应用程序应该跟踪一些抽象的“项目”,并且用户应该能够创建自己的分类时,类似EAV的项目属性存储设计可能会更好,而不考虑您需要在应用程序中支持的数据完整性。

哦,不!其他人(重新)发现了OTLT,这是一个真正的查找表。这是一种反模式。是时候阅读已出版的关于信息建模、关系模型和数据库设计的学术教科书了。(记录和使用设计的语言和工具手册不属于此类教科书。)(维基文章或网络帖子也不属于此类教科书。)几十本已出版的学术信息建模和数据库设计教科书都是pdf格式的在线免费教科书。斯坦福大学有一个免费的在线课程。(但请求SO之外的资源是离题的。)PS当您添加更多数据时,只需按类分类:(显然--)这是一个常见问题解答。在考虑发帖之前,请始终用谷歌搜索任何错误消息,以及你的问题/问题/目标的许多清晰、简洁和准确的措辞,包括和不包括你的特定字符串/名称;阅读许多答案。如果你发布一个问题,用一句话作为标题。请参见文本上方的投票箭头(&S)。