使用 ORM(如 ActiveRecord)为 Web API 定义模型时“类型表”(如 BOOK_TYPE 表)的重要性

Posted

技术标签:

【中文标题】使用 ORM(如 ActiveRecord)为 Web API 定义模型时“类型表”(如 BOOK_TYPE 表)的重要性【英文标题】:Importance of 'Type Tables' (like a BOOK_TYPE table) when defining models using ORM (like ActiveRecord) for web APIs 【发布时间】:2015-08-11 21:31:23 【问题描述】:

按类型表,我说的是books 表中的type 之类的东西,它可以映射到列出可能类型的book_types 表。

我看到的大多数实现只是定义一个字符串列并使用验证将其与一组类型进行比较['hardcover', 'softcover', 'ebook']

是否值得创建另一个模型BookType并与Book表建立一对多关系?

【问题讨论】:

【参考方案1】:

在关系模型中使用此类表的原因是为了避免数据库中的数据重复。每个类型字符串将存在于类型表的单行中;这意味着如果您需要更改该字符串,您不必更新使用它的每一行。现在可能看起来不太可能,或者在每种情况下都不太可能,但如果不以标准化方式进行设置,以后可能会很痛苦。

还有其他潜在的好处:

您可以通过在每行上使用整数外键 ID 而不是大字符串来节省空间。 如果每个类型都有一个短代码和一个较长的描述性字段会很有用,那么单独的类型表将节省空间,并以与上述相同的方式更容易维护描述字段。 如果有人需要将数据用于以后的报告或商业智能目的,在单个单词类型尚未明确的情况下,这样的描述性字段可能会很有帮助。

【讨论】:

以上是关于使用 ORM(如 ActiveRecord)为 Web API 定义模型时“类型表”(如 BOOK_TYPE 表)的重要性的主要内容,如果未能解决你的问题,请参考以下文章

.NET 功能 ORM、DAO、ActiveRecord (CRUD)

创建一个简单的“ORM/ActiveRecord”模式

ORM/DAO/DataMapper/ActiveRecord/TableGateway 的区别?

没有 yii 的 Yii Activerecord

SQL 基准测试:PHP ActiveRecord ORM 与 MySQL 与 CodeIgniter Active Record 与标准 PHP

Rails 中的 Active Record 和 ORM 有啥区别?