我对数据类型有许多怀疑。 我有一张表客户和供应商,哪个更好?创建两列,如果他们是客户或供应商,而另一个是标识符,则只取C或S.并且两列构成主键。或者只是一个记录由C或S开始,然后是代码识别的列,例如C3663或S2707。使用字符数据类型来保留主键值sql
在另一个表中,我有一个列作为主键,其数字值为5位,例如12345,哪种数据是合适的?字符(5),数字(5,0)或int 我认为字符(5)为什么ID不会进行数字操作
我对数据类型有许多怀疑。 我有一张表客户和供应商,哪个更好?创建两列,如果他们是客户或供应商,而另一个是标识符,则只取C或S.并且两列构成主键。或者只是一个记录由C或S开始,然后是代码识别的列,例如C3663或S2707。使用字符数据类型来保留主键值sql
在另一个表中,我有一个列作为主键,其数字值为5位,例如12345,哪种数据是合适的?字符(5),数字(5,0)或int 我认为字符(5)为什么ID不会进行数字操作
对于第一个示例,如果您只想确定记录是针对客户还是供应商
您可以有柱说EntityType
与数据类型char(1)
有值要么C
或S.
或者,您可以有两个bit
型柱说IsCustomer
和IsSupplier
将基于实体类型为客户持有价值True/False
或sup钳。
对于第二个例子,eg 12345
;如果您认为必须对该列值执行一些数值计算,则将其定义为Int
或Numeric
类型是有意义的,但如果没有对此列值执行数字操作,并且它定义了某种代码然后声明它为CHAR(5)
。同样,如果您确定大小固定为5个字符长度,则仅声明它为CHAR(5)
,否则请考虑声明它为VARCHAR
类型。
对于您的第一张客户或供应商表格:不要将数字代码与字符名称组合在一起。使用两个单独的字段。如果将它们结合起来,那么将客户与供应商隔离开来的所有查询都需要一些额外的逻辑(并且效率会稍差)。
对于第二个问题,我将使用int。它将比数字(5,0)小。而且你不想使用char(5),因为它的限制较少 - 它会允许像'abcde'这样的伪造值。
客户迟早会成为供应商(或其他方式)。使用单独的密钥/标识符列,并将SupplierNumber和CustomerNumber作为单独的列。 – adrianm 2014-10-19 11:42:59