一次回答一个问题:
软件中的实体组应该如何引用?对 id 或名称进行硬编码?
以使您的代码最易读的方式引用实体组。因此,也许您使用名称,或者可能使用看起来像名称但其值为 id 的常量。当您按组类型查找实体时,使用常量可以避免一次连接,但通常这不是什么大问题。
那为什么我什至需要数据库中的那个表呢?这是构建数据的错误方法吗?
这是构建数据的一种完全可以接受的方式。最正确的方法取决于您对数据的处理方式,但对于大多数应用程序,您的结构将是正确的。但是,您当然不需要数据库中的那个表——您可以在 entity_group 表上设置一个“group_type”字段。以下是优点和缺点:
当前结构的优点:
- 易于添加描述 entity_group_type 的字段。例如,您可能希望使某些组类型只能由管理员用户查看,或禁用,或其他。如果这是未来的可能性,它几乎需要这种数据库结构。
- 能够让您的数据库软件强制执行参照完整性,这意味着数据在 entity_group 和 entity_group_type 表之间保持一致。
在 entity_group 表上添加 group_type 字段的优点:
- 可能是您的代码中更简单的表示。例如,如果您使用 MVC 架构,那么拥有额外的表可能需要代码中的另一个模型对象。这通常不是问题,并且可能具有优势,但有时更简单更好。
- 当您按实体组类型查找实体时,您的 SQL 语句会稍微简单一些,因为涉及的表/连接会少一些。
我认为在大多数情况下,您当前的结构会领先,尽管它确实取决于您如何使用数据。除非您有充分的理由以不同的方式构建数据,否则我会坚持使用您当前的结构。