我应该将可空双精度型转换为整型吗?

本文关键字:整型 转换 双精度型 我应该 | 更新日期: 2023-09-27 18:06:00

假设我有两个SQL表:TableAuditTableTable是一个列,org_id,类型为float,允许为空。另外,org_id不是主键。具有相同名称的列位于AuditTable中。我还有一个EditTable类,用于更改TableAuditTableEditTable的成员是通过用户界面设置的。EditTable也包含一个成员org_id。

没有很好的理由为什么Table.org_id是一个浮点数;它将始终包含一个整数值。但是,由于Table已经存在,我无法更改Table.org_id的类型。然而,由于我创建了AuditTableEditTable,我可以将AuditTable.org_idEditTable.org_id设置为任何类型。

当Visual Studio将Table转换为c#类时,Table.org_id被创建为Nullable<double>。我应该让AuditTable.org_id一个浮动与null允许,并使EditTable.org_id一个可空双匹配Table.org_id ?或者我应该让AuditTable.org_idEditTable.org_id都是整型,然后做一些转换?然而,为了安全起见,我正在考虑远离铸造,只是使类型与原始Table匹配。

谢谢你的建议

我应该将可空双精度型转换为整型吗?

哦,将连接键存储为浮点数是一个坏主意。我希望SQL实际上禁止这种做法。问题是0.9999999999可能看起来像1.00000000,但它们在连接时(或在where子句中)不匹配。在这种情况下,"所见即所得"要好得多。

首先,去找任何你能找到的人,乞求/贿赂/奉承/鼓励他们去做:

 alter table `table` modify org_id int;

如果这不起作用,你有一个难题。如果连接键具有相同的类型,甚至是我不同意的类型,那么查询性能会好得多。而且,这对于数据库来说是一个非常重要的概念。因此,您不能更改连接键。

相反,我认为您应该在表中添加一个新键,称为org_id_int。这将具有正确的类型,有用的索引——除了漂亮的名称之外的所有内容。将此用于连接。对现有表的连接使用另一个键,直到它得到修复。