使用字符数据类型来保留主键值sql



我对数据类型有很多疑问。我在一张桌子上有客户和供应商,哪个更好?创建两列,一列只取C或S(如果他们是客户或供应商),另一列​​这是一个标识符。两列构成主键。或者只是一列,其中记录以C或S开头,然后是代码标识,例如C3663或S2707。

在另一个表中,我有一列作为主键,它取数值​​由5位数字组成,例如12345,什么样的数据才是合适的?char(5)、numeric(5,0)或int我想char(5)为什么ID不进行数字运算

对于第一个例子,如果您只想确定记录是针对客户还是供应商,那么

您可以有一个列,例如EntityType,数据类型为char(1),值为CS.

或者,您可以有两个bit类型列,例如IsCustomerIsSupplier,它们将根据客户或供应商的实体类型保存值True/False

对于第二个示例,eg 12345;如果您认为必须对该列值执行一些数值计算,那么将其定义为IntNumeric类型是有意义的,但如果不对该列值进行数值运算,并且它定义了某种代码,则将其声明为CHAR(5)。同样,如果您确定大小固定为5个字符的长度,那么只将其声明为CHAR(5),否则请考虑将其宣布为VARCHAR类型。

对于您的第一个客户或供应商表:不要将数字代码与字符名称组合。使用两个单独的字段。如果你将它们组合在一起,那么所有将客户与供应商隔离的查询都需要一些额外的逻辑(而且效率会有所降低)。

对于您的第二个问题,我将使用int。它将小于数字(5,0)。您不想使用char(5),因为它的限制性较小——它将允许像"abcde"这样的伪值。

最新更新