假设,我有两个SQL表:TableAuditTable。InTable是允许为空的float类型的列org_id。而且,org_id不是主键。具有相同名称的列位于AuditTable中。我还有一个EditTable类用于对TableAuditTable进行更改。EditTable的成员是通过用户界面设置的。EditTable还包含一个组织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浮点数允许为空,并使EditTable.org_id为可为空的双精度数以匹配Table.org_id?或者我应该同时做AuditTable.org_idEditTable.org_id的ints然后做一些铸造?不过,我在想,为了安全起见,我不想选演员,只想让类型与最初的匹配。
谢谢你的建议。

最佳答案

哦,把连接键存储为浮点数是个坏主意。我希望SQL实际上禁止了这种做法。问题是,0.999999999看起来像1.00000000,但它们在连接时(或在where子句中)不匹配。在这样的条件下,你所看到的就是你所得到的,这样会更好。
首先,去任何你能去的地方,乞求/贿赂/奉承/鼓励他们去做:

 alter table `table` modify org_id int;

如果那不起作用,你就有一个难题。对于查询性能来说,将连接键设置为相同的类型(甚至是我不同意的类型)要好得多。而且,这对于数据库来说是一个非常重要的概念。所以,不能更改联接键。
相反,我认为应该在表中添加一个名为org_id_int的新键。这将有正确的类型,一个有用的索引——除了一个漂亮的名字之外的所有东西。用这个来连接。使用其他键连接到现有表,直到它得到修复为止。

10-02 05:15