我应该将可空双精度型转换为整型吗?
本文关键字:整型 转换 双精度型 我应该 | 更新日期: 2023-09-27 18:06:00
假设我有两个SQL表:Table
和AuditTable
。Table
是一个列,org_id
,类型为float,允许为空。另外,org_id
不是主键。具有相同名称的列位于AuditTable
中。我还有一个EditTable
类,用于更改Table
和AuditTable
。EditTable
的成员是通过用户界面设置的。EditTable
也包含一个成员org_id。
没有很好的理由为什么Table.org_id
是一个浮点数;它将始终包含一个整数值。但是,由于Table
已经存在,我无法更改Table.org_id
的类型。然而,由于我创建了AuditTable
和EditTable
,我可以将AuditTable.org_id
和EditTable.org_id
设置为任何类型。
当Visual Studio将Table
转换为c#类时,Table.org_id被创建为Nullable<double>
。我应该让AuditTable.org_id
一个浮动与null允许,并使EditTable.org_id
一个可空双匹配Table.org_id
?或者我应该让AuditTable.org_id
和EditTable.org_id
都是整型,然后做一些转换?然而,为了安全起见,我正在考虑远离铸造,只是使类型与原始Table
匹配。
谢谢你的建议
哦,将连接键存储为浮点数是一个坏主意。我希望SQL实际上禁止这种做法。问题是0.9999999999可能看起来像1.00000000,但它们在连接时(或在where
子句中)不匹配。在这种情况下,"所见即所得"要好得多。
首先,去找任何你能找到的人,乞求/贿赂/奉承/鼓励他们去做:
alter table `table` modify org_id int;
如果这不起作用,你有一个难题。如果连接键具有相同的类型,甚至是我不同意的类型,那么查询性能会好得多。而且,这对于数据库来说是一个非常重要的概念。因此,您不能更改连接键。
相反,我认为您应该在表中添加一个新键,称为org_id_int
。这将具有正确的类型,有用的索引——除了漂亮的名称之外的所有内容。将此用于连接。对现有表的连接使用另一个键,直到它得到修复。