假设我有两个SQL表:Table
和AuditTable
。 Table
中的org_id
列是float类型,允许使用null。此外,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
允许使用空值的浮点数,并使EditTable.org_id
成为可以为空的双重符合Table.org_id
?或者我应该同时制作AuditTable.org_id
和EditTable.org_id
整数,然后进行一些投射?但是,我正在考虑远离强制转换为安全方面而只是使类型与原始Table
匹配。
感谢您的任何建议。
答案 0 :(得分:2)
哦,将连接键存储为浮点数是个坏主意。我希望SQL实际上禁止这种做法。问题是0.9999999999可能看起来像1.00000000,但它们在加入时(或在where
子句中)不匹配。对于这样的条件,你有什么看得见的东西要好得多。
首先,去任何你可以的人,乞求/贿赂/奉承/鼓励他们这样做:
alter table `table` modify org_id int;
如果这不起作用,你就有一个难题。查询性能要好得多,连接键的类型相同,甚至是我不同意的类型。此外,这对数据库来说是一个非常重要的概念。因此,您无法更改该连接密钥。
相反,我认为您应该在表格中添加一个新密钥,称为org_id_int
。这将具有正确的类型,一个有用的索引 - 除了漂亮的名称之外的所有东西。用于连接。使用另一个键进行现有表的连接,直到它被修复。