2 回答
TA贡献1818条经验 获得超7个赞
我认为您指的是像gorm这样的 ORM 库
在这种情况下,元数据像sql:"primary_key"或sql:"index"只会告诉 ORM 在尝试设置表或迁移它们时创建索引。
gorm 中的几个示例可能是:索引、主键、外键、many2many 关系,或者在尝试将现有模式适应您的gorm模型时,显式设置类型,例如:
type Address struct {
ID int
Address1 string `sql:"not null;unique"` // Set field as not nullable and unique
Address2 string `sql:"type:varchar(100);unique"`
Post sql.NullString `sql:"not null"`
}
TA贡献1876条经验 获得超7个赞
取决于您使用的包和您的用例。CRUD 就够了吗?几乎总是这样,除非包装上这样说,这通常是罕见但可能的。很少有包有时会在可能会引起错误的引擎盖下魔术。如果您知道这些行为,或者在您的代码中非常明确,您可能会避免它。
索引标签主要允许您使用包的迁移工具将模型声明转换为 sql 查询(CREATE
语句)。所以如果你总是想自己做这件事,那么你可能不需要费心添加这样的标签。
但是如果你的包需要一个标签,你可能会发现自己有一个错误。例如,在 的情况下gorm
,该Model
方法将结构指针作为输入。如果这个 struct 有一个名为ID
它的字段,它将它用作主键,也就是说,ID
它的值为“4”,它会WHERE id=4
自动添加一个。如果你的结构有ID
,你甚至不需要添加一个primary_key
标签,它仍然会被视为一个。当您同时拥有“非主键”ID
字段和实际用作主键的另一个字段时,此行为可能会导致问题。另一个例子gorm
是这个。一种可能的行为还可以是检查可空属性并在INSERT
语句涉及NOT NULL
字段时抛出错误NULL
价值。
另一方面,向结构添加标签可以被认为是一种很好的做法,因为它在数据库中提供了其属性的上下文。
- 2 回答
- 0 关注
- 152 浏览
添加回答
举报