Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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/1/vb.net/17.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# 字符串作为主键_C#_Sql_Entity Framework - Fatal编程技术网

C# 字符串作为主键

C# 字符串作为主键,c#,sql,entity-framework,C#,Sql,Entity Framework,我知道这已经讨论了很多,我的最终选择是:我将使用字符串作为主键,主要有两个原因: 我不会有超过10万行 它会简化很多 我可以做些什么来提高性能,比如创建索引 我首先使用实体框架代码。尽可能减少VARCHAR的长度 索引是为主键自动创建的,因此您不必为此列创建任何索引。尽可能缩短VARCHAR的长度 索引是为主键自动创建的,因此您不必为此列创建任何索引。创建索引是不必要的,因为主键提供了一个唯一的,聚集的索引 另外请注意,大多数RDBMS可以更有效地索引固定长度字段,如CHAR,而不是可变长度字段

我知道这已经讨论了很多,我的最终选择是:我将使用字符串作为主键,主要有两个原因:

  • 我不会有超过10万行
  • 它会简化很多
  • 我可以做些什么来提高性能,比如创建索引


    我首先使用实体框架代码。

    尽可能减少
    VARCHAR
    的长度


    索引是为
    主键自动创建的,因此您不必为此列创建任何索引。

    尽可能缩短
    VARCHAR
    的长度


    索引是为
    主键自动创建的,因此您不必为此列创建任何索引。

    创建索引是不必要的,因为
    主键提供了一个
    唯一的
    聚集的
    索引

    另外请注意,大多数RDBMS可以更有效地索引固定长度字段,如
    CHAR
    ,而不是可变长度字段,如
    VARCHAR

    考虑的另一种可能性:
    一个整数(
    INT
    )主键,在最初用作
    主键的字符串值上具有唯一索引。这使得在强制执行原始要求的同时,可以方便地在整数字段上进行
    连接(更不用说节省空间)。

    创建索引是不必要的,因为
    主键提供了一个
    唯一的
    聚集的
    索引

    另外请注意,大多数RDBMS可以更有效地索引固定长度字段,如
    CHAR
    ,而不是可变长度字段,如
    VARCHAR

    考虑的另一种可能性:
    一个整数(
    INT
    )主键,在最初用作
    主键的字符串值上具有唯一索引。这使得在强制执行原始要求的同时,
    JOIN
    ing一个整数字段变得容易(更不用说节省空间了)。

    Primary键默认获得一个索引。我读到这是个坏主意,因为索引构建比整数更昂贵。我真的不知道该说什么。我担心的是性能,10万行是一个我以非常高的期望值计算出来的数字。对于表示极端“10万行”情况的数据集,您当前的设计是否存在性能问题?如果你还没有衡量——现在就设定目标并进行衡量,当你有结果时——决定它们是否达到你的目标。这比开始担心要容易得多——以后当您知道需要存储什么时,重新设计DB可能会更容易。我理解您的意思。我会尝试一下,稍后再回来。有趣的是,你认为它会简化事情。主键的主要用途是唯一地标识记录。UUID和integer autoincrement使这变得非常简单。但是您认为创建100000个唯一字符串会更简单吗?祝你好运。主键默认会得到一个索引。我读到这是个坏主意,因为建立索引要比使用整数更昂贵。我真的不知道该说什么。我担心的是性能,10万行是一个我以非常高的期望值计算出来的数字。对于表示极端“10万行”情况的数据集,您当前的设计是否存在性能问题?如果你还没有衡量——现在就设定目标并进行衡量,当你有结果时——决定它们是否达到你的目标。这比开始担心要容易得多——以后当您知道需要存储什么时,重新设计DB可能会更容易。我理解您的意思。我会尝试一下,稍后再回来。有趣的是,你认为它会简化事情。主键的主要用途是唯一地标识记录。UUID和integer autoincrement使这变得非常简单。但是您认为创建100000个唯一字符串会更简单吗?祝你好运。对不起,我在上面发表了评论。如果需要,请考虑并更新您的答案对不起,我在上面发表了评论。如果需要,请考虑并更新您的答案。我无法拥有自动身份(或计算主键,因为我必须通过web将相同的信息从一个库移动到另一个库。使用自然主键,我可以在不增加代码复杂性的情况下执行此操作。相同的数据(代理键和所有数据)在多个“库”上重复存在有什么问题?是否所有内容都被转储到一个中央数据库中,从中运行查询?信息通过以下路径传递:开发->测试->生产->客户机。其想法是,我可以在所有这些位置拥有相同的数据状态。当然,我可以使用identity主键,但这不如让事情变得简单和容易。如何事情会变得更简单吗?我不需要关心现有关系,我可以插入我的对象或更新,但我需要做一些检查,但使用代理键会更复杂。我不能有自动标识(或计算主键,因为我必须通过web将相同的信息从一个库移动到另一个库。使用自然主键,我可以在不增加代码复杂性的情况下执行此操作。相同的数据(代理键和所有数据)在多个“库”上重复存在有什么问题?是否所有内容都被转储到一个中央数据库中,从中运行查询?信息通过以下路径传递:开发->测试->生产->客户机。其想法是,我可以在所有这些位置拥有相同的数据状态。当然,我可以使用identity主键,但这不如让事情变得简单和容易。如何事情会更简单吗?我不需要关心现有关系的类型,我可以插入我的对象或更新,但我需要做一些检查,但使用代理键会更复杂。