在这种情况下使用 1 table 而不是多个 table 是否有意义?
Does using 1 table instead of multiple tables make sense in this case?
假设我正在跟踪书籍、汽车、动物等信息,然后每个信息都有一个 class化的属性,例如流派(恐怖、喜剧等)、类型(SUV、两厢车等) ), class(哺乳动物等)。我的直觉告诉我,我将有 3 个 table,如 book_genres、car_types、animal_classes 来存储这些。
但是是否存在仅使用 1 个 classifications table 并具有 3 个字段:id、classification_name、classification_option 并且仅引用的情况或争论这在我的书、汽车和动物 table 中?
甚至 2 tables: classifications table with id and name (types, genres, classes) and classification_options table with id, classification_id, and name (horror, suv, mammal, etc)
最好为每种类型创建一个 table:假设明年您要将 property/column 添加到 car
,称为 "make" 或 "model".通过为每种类型设置单独的 table,您将能够仅将此列添加到 cars
,而不会影响 books
和 animals
。
保持结构模块化和按类型特定(原则称为:关注点分离)将使您的代码在未来更易于阅读、维护和测试!
你的直觉告诉你一个正确的事情:从逻辑和物理设计的角度来看,三个表更好;数据完整性由数据库支持,查询更简单。
但是,当您的应用程序应该跟踪一些抽象 "items" 并且用户应该能够创建自己的分类时,无论缺少数据,项目属性存储的 EAV-like 设计可能会更好您需要在应用程序中支持的完整性。
假设我正在跟踪书籍、汽车、动物等信息,然后每个信息都有一个 class化的属性,例如流派(恐怖、喜剧等)、类型(SUV、两厢车等) ), class(哺乳动物等)。我的直觉告诉我,我将有 3 个 table,如 book_genres、car_types、animal_classes 来存储这些。
但是是否存在仅使用 1 个 classifications table 并具有 3 个字段:id、classification_name、classification_option 并且仅引用的情况或争论这在我的书、汽车和动物 table 中?
甚至 2 tables: classifications table with id and name (types, genres, classes) and classification_options table with id, classification_id, and name (horror, suv, mammal, etc)
最好为每种类型创建一个 table:假设明年您要将 property/column 添加到 car
,称为 "make" 或 "model".通过为每种类型设置单独的 table,您将能够仅将此列添加到 cars
,而不会影响 books
和 animals
。
保持结构模块化和按类型特定(原则称为:关注点分离)将使您的代码在未来更易于阅读、维护和测试!
你的直觉告诉你一个正确的事情:从逻辑和物理设计的角度来看,三个表更好;数据完整性由数据库支持,查询更简单。
但是,当您的应用程序应该跟踪一些抽象 "items" 并且用户应该能够创建自己的分类时,无论缺少数据,项目属性存储的 EAV-like 设计可能会更好您需要在应用程序中支持的完整性。