使用字符数据类型保留主键值sql
我对数据类型有很多疑问。 我在一张桌子上有客户和供应商,哪一个更好?创建两列,其中一列仅接受C或S(如果是客户或供应商)和另一列这是一个标识符。两列组成主键。或者只是一列,其中记录以C或S开头,然后是代码标识,例如C3663或S2707 在另一个表中,我有一列作为主键,它接受数值对于5位数字,例如12345,什么样的数据才是合适的?字符(5)、数字(5,0)或整数使用字符数据类型保留主键值sql,sql,sql-server,sql-server-2012,sqldatatypes,Sql,Sql Server,Sql Server 2012,Sqldatatypes,我对数据类型有很多疑问。 我在一张桌子上有客户和供应商,哪一个更好?创建两列,其中一列仅接受C或S(如果是客户或供应商)和另一列这是一个标识符。两列组成主键。或者只是一列,其中记录以C或S开头,然后是代码标识,例如C3663或S2707 在另一个表中,我有一列作为主键,它接受数值对于5位数字,例如12345,什么样的数据才是合适的?字符(5)、数字(5,0)或整数 我想char(5)对于第一个示例,如果您只想确定记录是针对客户还是供应商的,那么为什么ID不进行数字操作 您可以使用数据类型
我想char(5)对于第一个示例,如果您只想确定记录是针对客户还是供应商的,那么为什么ID不进行数字操作 您可以使用数据类型为
char(1)
且值为C
或S的列,比如EntityType
。
或者,您可以有两个bit
类型列,即IsCustomer
和IsSupplier
,它们将根据作为客户或供应商的实体类型保存值True/False
第二个例子,例如12345;如果您认为必须对该列值执行一些数值计算,那么将其定义为
Int
或numeric
类型是有意义的,但如果没有对该列值执行数值操作,并且它定义了某种代码,则将其声明为CHAR(5)
。同样,如果您确定大小固定为5个字符长度,则只声明它为“代码> char(5),否则请考虑将其声明为<代码> VARARAR < /代码>类型。< P>您的第一个客户或供应商表:不要将数字代码与字符指定相结合。使用两个单独的字段。如果您将它们结合起来,那么所有将客户与供应商隔离的查询都需要一些额外的逻辑(而且效率会有所降低)
对于第二个问题,我将使用int。它将小于数值(5,0)。您不想使用char(5)来实现这一点,因为它的限制性较低——它允许使用诸如“abcde”之类的虚假值。迟早客户也会成为供应商(或者反过来)。使用单独的键/标识符列,并将SupplierNumber和CustomerNumber作为单独的列。