在特定场景中,我有一个包含MachineNumber(Varchar)及其MachineID(Int)的查找表。在我的事务表中,我使用查找表的MachineID来引用机器号。
要求:我可以在事务表中将MachineID字段类型设置为Varchar,同时在查找表中将其类型保留为Int吗?原因,对于某些机器,MachinNumber没有存储在Lookup表中,我需要将用户提供的实际MachineNumber存储在Transaction表本身中,并且机器号是字母数字我想要从Int更改此引用字段的类型到Varchar。
简而言之,在事务表中,MachineID字段应包含MachineID(从查找表引用)和实际机器编号(由用户提供并直接存储在此处)
问题:为这些引用的字段设置不同的类型是一个好习惯,还是一种常见的做法,这两个表之间使用Join的查询会产生什么影响?
谢谢, Alind
答案 0 :(得分:0)
作为一般规则,首选使用自然数据作为关键,当然,在所有情况下都保证存在且唯一。
在您的情况下,如果您可以使用实际计算机ID(varchar),那么请执行此操作,并将其作为查找的密钥等。
我将补充一点,我曾经为一家拥有EFTPOS终端与我们的服务器进行交易的公司工作过。我们决定使用方便的独特EFTPOS终端ID,但是当他们发生故障并被银行的维修人员换掉时我们遇到了问题。新终端有不同的ID,但使用的是“相同”的终端。当终端被修复并在另一个客户端位置重新进入现场时,我们的问题变得复杂了 - 具有相同的原始终端ID!这最初导致我们没有麻烦。我们最终使用了一个人工ID,并将当前物理终端ID作为属性。