假设我要跟踪书籍,汽车,动物等信息,然后每个信息都有一个分类属性,例如类型(恐怖,喜剧等),类型(越野车,掀背车等),类别(哺乳动物等) )。我的直觉告诉我,我将有3个表,如book_genres,car_types,animal_classes来存储这些表。
但是是否存在仅使用1个分类表并具有3个字段的情况或参数:id,classification_name,classification_option并仅在我的书,汽车和动物表中引用它?
甚至有2个表:具有ID和名称(类型,类型,类别)的分类表以及具有ID,classification_id和名称(恐怖,SUV,哺乳动物等)的category_options表
答案 0 :(得分:1)
最好为每种类型创建一个表:假设明年您将要向car
添加一个属性/列,称为“ make”或“ model”。通过为每种类型使用单独的表格,您将只能将此列添加到cars
,而不会影响books
和animals
。
保持结构的模块化和特定于每种类型(称为关注点分离)的原则,将使您的代码将来更易于阅读,维护和测试!
答案 1 :(得分:1)
您的直觉告诉您正确的事情:从逻辑和物理设计的角度来看,三个表更好。数据库支持数据完整性,并且查询更简单。
但是,当您的应用程序应该跟踪一些抽象的“项目”,并且用户应该能够创建自己的分类时,类似于EAV的项目属性存储设计可能会更好,而无需缺少需要支持的数据完整性在应用程序中。