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

时间:2014-10-18 21:38:49

标签: sql sql-server sql-server-2012 sqldatatypes

我对数据类型有很多疑问。 我有一个表客户和供应商,哪个更好?创建两列一列,如果它们是客户或供应商,则仅采用C或S,另一列作为标识符。并且两列构成主键。或者只是一个列,其中记录以C或S开头,然后是代码标识,例如C3663或S2707。

在另一个表中,我有一个列作为主键,取5位数的数值,例如12345,哪种数据是合适的? char(5),numeric(5,0)或int 我认为char(5)为什么ID不进行数值运算

2 个答案:

答案 0 :(得分:1)

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

您可以使用数据类型为EntityType的列char(1),其值为CS.

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

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

答案 1 :(得分:1)

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

对于你的第二个问题,我会使用int。它将小于数字(5,0)。而且你不想使用char(5),因为它的限制性较小 - 它会允许虚假值,例如' abcde'。