0

有时我有一个名为“status”的表,它只包含 ID(PK)和名称(字符串,唯一)。此外,其他表已引用此状态(例如 status_id)

比方说,有两种状态:

1 - status1
2 - status2

现在,我想在 table2 中插入/更新记录(它引用了状态表)。最好的方法是什么,我应该硬编码我想要设置的状态 ID 还是应该按名称查询,然后获取 ID 并在之后分配它?

注意:这也是一般的编程问题(没有直接的 SQL 查询)。我找不到它的标签。

4

3 回答 3

0

如果name是包含唯一值的列,则可以使用name字段获取ID,然后使用ID. 但是,通常该name列不包含唯一值,因此需要使用其他列仅接收 1 个 id 而不是多个。

看情况:

ID name
1  John White
2  John White

在这里,如果您使用name字段,您将得到 2 个不同IDs的返回,这将导致错误。这就是为什么您需要另一种方法,例如:

..
where name = @name and dateOfBirth = @dob and MothersName=@mothersname

以确保返回一个唯一的 ID。

总而言之,如果您确定该name字段包含唯一值,请使用该字段来获取ID而不是使用ID硬编码的值。否则,您可以尝试在配置文件中创建一个键,例如“lookupid”,并使用它的值而不是仍然使用硬编码的 ID,这样会更好地为将来维护。

于 2018-11-15T20:12:32.867 回答
0

名称不是检查 id 是什么的最佳选择,相反,因为名称在大多数情况下(可能是相同的一般情况)会导致重复,从而在您继续添加新列时导致行冗余以及使其变得最糟糕。更好的选择一如既往是表或唯一列的主键,您可以对列设置唯一约束以处理重复项,以防您希望将其用作搜索 id

于 2018-11-15T20:57:25.483 回答
0

硬编码从来都不是一个好主意,但取决于代码在整个生命周期中值的变化频率......使用查询更好

sql

于 2018-11-15T22:42:39.063 回答