gpt4 book ai didi

nhibernate - Hibernate/NHibernate 中的枚举表

转载 作者:行者123 更新时间:2023-12-03 12:32:18 25 4
gpt4 key购买 nike

我们正在使用 NHibernate,我们用于存储类枚举信息的常见模式之一是为枚举定义单独的表,并且只需引用使用枚举的主实体/表中的 ID。一个简单的例子:

Message
-------
ID (bigint PK)
MessageTypeID (bigint FK)
Body (varchar)

MessageType
-----------
ID (bigint PK)
Value (varchar)

MessageType 表包含少量枚举值,例如:SMS、MMS、PSMS 等。

像这样将枚举值放在单独的表中是否值得?我想枚举的优点是您可以在将来更轻松地扩展它并且它更加规范化,但缺点是每次获取消息时都必须进行连接。是否有一个转折点,您会选择一个而不是另一个?

最佳答案

使用枚举意味着不要像现在这样使用另一个表。正如你所说,它也更快,而且更简单。

在这两种情况下,您都可以添加更多选项,但问题是:如果您在表中添加其他项目,您是否需要重新编译应用程序才能添加此类功能?

我的意思是,如果您的应用程序设计是耦合的并且要支持您需要重新编译的新消息类型(可能是因为您需要包含 SMS 实现),那么拥有单独的表是不值得的,您应该使用枚举

另一方面,如果您的实体缺少逻辑(例如 Country 或 States 表),或者您的应用程序可以插入新的消息类型而无需重新编译,您应该使用另一个表。为此,您可以将表格更改为以下内容:

MessageType
-----------
ID (bigint PK)
Value (varchar)
ImplementationType (varchar) (ie: Xyz.SMSSender, Xyz)

或者您可以有一个单独的配置文件,您可以在其中自定义注入(inject)的依赖项。

关于nhibernate - Hibernate/NHibernate 中的枚举表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/604907/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com