Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用字符数据类型保留主键值sql_Sql_Sql Server_Sql Server 2012_Sqldatatypes - Fatal编程技术网

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

使用字符数据类型保留主键值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不进行数字操作 您可以使用数据类型

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

在另一个表中,我有一列作为主键,它接受数值​​对于5位数字,例如12345,什么样的数据才是合适的?字符(5)、数字(5,0)或整数
我想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作为单独的列。