Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.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/27.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
C# identity insert在metadatatables中的使用是否良好_C#_Sql Server_Metadata_Identity Insert - Fatal编程技术网

C# identity insert在metadatatables中的使用是否良好

C# identity insert在metadatatables中的使用是否良好,c#,sql-server,metadata,identity-insert,C#,Sql Server,Metadata,Identity Insert,我的数据库中有几个表只包含“元数据”。 例如,我们有不同的GroupType、ContentItemType、语言等 问题是,如果使用自动编号,则可能会创建间隙。 id在我们的代码中使用,因此,数字非常重要 现在我想知道在这些表中不使用自动编号是否更好 现在我们首先在数据库中创建行,然后才能编写代码。在我看来,情况不应该如此 你们怎么看?我会使用您建议的标识列作为主键(代理键),然后将您的候选键(来自系统的标识符)指定为标准列,但对其应用唯一的约束。这样可以确保不插入重复记录 有意义吗?我会使用

我的数据库中有几个表只包含“元数据”。 例如,我们有不同的GroupType、ContentItemType、语言等

问题是,如果使用自动编号,则可能会创建间隙。 id在我们的代码中使用,因此,数字非常重要

现在我想知道在这些表中不使用自动编号是否更好

现在我们首先在数据库中创建行,然后才能编写代码。在我看来,情况不应该如此


你们怎么看?

我会使用您建议的标识列作为主键(代理键),然后将您的候选键(来自系统的标识符)指定为标准列,但对其应用唯一的约束。这样可以确保不插入重复记录


有意义吗?

我会使用您建议的标识列作为主键(代理键),然后将您的候选键(来自系统的标识符)指定为标准列,但对其应用唯一约束。这样可以确保不插入重复记录


有意义吗?

好吧,如果这些数字对你很重要,因为它们是代码,我可能不会使用标识


相反,只需确保使用INT列并将其作为主键-在这种情况下,您必须自己提供ID,并且它们必须是唯一的。

好吧,如果这些数字对您很重要,因为它们在代码中,我可能不会使用标识


相反,只需确保使用INT列并将其作为主键-在这种情况下,您必须自己提供ID,并且它们必须是唯一的。

如果代码中的数字是硬编码的,请不要使用标识字段。在数据库中对数字进行硬编码,因为有人编写了错误的数据库脚本,所以它们不太容易更改。

如果数字是在代码中硬编码的,请不要使用标识字段。将它们硬编码到数据库中,因为有人编写了糟糕的数据库脚本,所以它们不太容易更改。

为了简单起见,我也会使用标识列作为主键,以便将记录插入到数据库中,但随后使用列作为元数据类型,我称之为我的LookUpType(int),以及LookUpId(代码中的int值)或select列表中的值、LookUpName(字符串)的列,如果这些值需要额外的设置,可以说使用额外的列。我个人使用了两个附加值,LookUpKey表示层次关系,LookUpValue表示LookUpName的缩写或替代值。

为了简单起见,我也会使用一个标识列作为主键,以便将记录插入数据库,但随后使用一个列表示元数据类型,我称之为我的LookUpType(int),以及LookUpId(代码中的int值)或select列表中的值、LookUpName(字符串)的列,如果这些值需要额外的设置,可以说使用额外的列。我个人使用两个附加值,LookUpKey表示层次关系,LookUpValue表示LookUpName的缩写或替代值。

如果这些是FK表,仅用于将代码扩展为描述或包含其他属性,则我不会使用标识。标识用于永久插入用户数据,元数据表通常是静态的。当您将更新部署到代码中时,您不希望感到惊讶,也不希望标识值与预期不同

例如,您向“Languages”表添加一个新值,您希望ID为6,但由于某些原因(开发不同步,其他人未实现其下一种语言类型等),您获得的下一个标识不同,例如7。然后插入或转换一组使用语言ID=6的行,这些行都失败了,因为它不存在(元数据表中为7)。更糟糕的是,它们实际上都是插入或更新的,因为您认为属于您的值6已经存在于medadata表中,并且您现在有两个共享相同6值的项的组合,而您的新7值未被使用

我会根据您需要的代码数量和查看的频率来选择合适的数据类型(对于一些值,可以查看字符,这有助于提高内存)

例如,如果您只有几个组,并且经常查看原始数据,那么char(1)可能很好:

GroupTypes table
-----------------
GroupType            char(1)    --'M'=manufacturing, 'P'=purchasing, 'S'=sales
GroupTypeDescription varchar(100)
但是,如果有许多不同的值,则某种形式的int(tinyint、smallint、int、bigint)可以:

EmailTypes table
----------------
EmailType            smallint    --2 bytes, up to 32k different positive values
EmailTypeDescription varchar(100) 

如果这些FK表仅用于将代码扩展为描述或包含其他属性,则我不会使用标识。标识用于永久插入用户数据,元数据表通常是静态的。当您将更新部署到代码中时,您不希望感到惊讶,也不希望标识值与预期不同

例如,您向“Languages”表添加一个新值,您希望ID为6,但由于某些原因(开发不同步,其他人未实现其下一种语言类型等),您获得的下一个标识不同,例如7。然后插入或转换一组使用语言ID=6的行,这些行都失败了,因为它不存在(元数据表中为7)。更糟糕的是,它们实际上都是插入或更新的,因为您认为属于您的值6已经存在于medadata表中,并且您现在有两个共享相同6值的项的组合,而您的新7值未被使用

我会根据您需要的代码数量和查看的频率来选择合适的数据类型(对于一些值,可以查看字符,这有助于提高内存)

例如,如果您只有几个组,并且经常查看原始数据,那么char(1)可能很好:

GroupTypes table
-----------------
GroupType            char(1)    --'M'=manufacturing, 'P'=purchasing, 'S'=sales
GroupTypeDescription varchar(100)
但是,如果有许多不同的值,则某种形式的int(tinyint、smallint、int、bigint)可以:<