Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server SQL设计-如何存储大量URL_Sql Server - Fatal编程技术网

Sql server SQL设计-如何存储大量URL

Sql server SQL设计-如何存储大量URL,sql-server,Sql Server,我正在编写一个应用程序,该应用程序将有一个SQL Server后端来存储(除其他外)URL。URL将映射到用户,一些URL可能在不同的用户之间是通用的。在缺乏真正的DBA的情况下,我正试图设计一个能够尽可能高效地处理数十万个URL的解决方案 想法: 创建只包含ID、URL的表 赞成:简单、完整。 缺点:URL将存在重复条目,这将导致表超出需要的大小 将用户和URL拆分为单独的表。一个包含用户ID和URL ID的表。另一个具有URL ID和URL本身的表 赞成:系统中的单个URL似乎更“企业化”

我正在编写一个应用程序,该应用程序将有一个SQL Server后端来存储(除其他外)URL。URL将映射到用户,一些URL可能在不同的用户之间是通用的。在缺乏真正的DBA的情况下,我正试图设计一个能够尽可能高效地处理数十万个URL的解决方案

想法:

  • 创建只包含ID、URL的表

    赞成:简单、完整。
    缺点:URL将存在重复条目,这将导致表超出需要的大小

  • 将用户和URL拆分为单独的表。一个包含
    用户ID
    URL ID
    的表。另一个具有
    URL ID
    URL
    本身的表

    赞成:系统中的单个URL似乎更“企业化”
    缺点:当试图撤回结果时,必须连接两个表,并且不确定这种方法的好处是什么

  • 扩展2的想法,除了真正打破它。因此,有一个表用于域,另一个表用于路径/查询字符串。然后,
    user
    表将具有
    userid、域ID、路径ID

    赞成:即使数据不相关,URL也可以共享数据(这意味着,
    cnn.com/helloworld
    nbc.com/helloworld
    将具有不同的域ID,但路径ID相同..这在以后运行度量时似乎很有用

    缺点:从性能的角度看,这似乎是一场噩梦(同样,因为连接是获取URL所必需的)


  • 有什么想法吗?

    在我的设计中,我会做以下几点:

    UserId  UrlId
    1       1
    2       2
    1       1
    
    UrlId  Url
    1      http://www.google.com
    2      http://www.yahoo.com
    
    将您的URL存储在单独的表中,并且仅在URL表中创建一个新条目(如果不存在完全匹配)。如果您有许多常用URL,这将节省一些空间。您可以进一步添加第三个表,如您所述,例如

    UrlPathId  UrlId  UrlPath
    1          1      /shopping
    
    …然后将UrlPathId绑定到用户表。也许更进一步:

    UrlPathId  UrlId  UrlQueryString
    1          1      ?product=speakers
    

    …再次,从用户表中引用它。

    听起来您在描述用户和URL之间的多对多关系

    我强烈建议排除选项1。这不仅会增加大小,而且因为如果您需要更新URL或用户,您将不得不在每次重复时进行更新,而不是一次

    在2和3之间进行选择更为困难,因为这更多地取决于如何使用它。2更为简单,并且仍然是标准化的。3中的功能对我来说似乎没有超过复杂性,所以我个人选择2


    编辑:看到George的答案后,我完全同意第一部分。

    你真的那么缺乏空间吗?除非你自己需要将URL视为一个对象,否则我只会选择选项1,如果你对URL有特定的性能要求,就用索引覆盖它


    请参阅我在这里关于处理孤立URL的其他评论。

    我可能会选择选项3。我更愿意减少数据冗余量,因为我相信给定域和路径表上的索引,它们会很快进行查找。此外,我猜这些表可能仅在用户登录系统时才被访问优化布局可以避免任何异常情况,例如更新。想象一个域名会发生变化。在#1的情况下,您必须修改大量记录,从而有失去数据一致性的风险。存储这些url有什么意义?如果是指向用户记录的url,或指向该用户起始页的url,或者其他可能改变设计的东西。所以简而言之,这些是指向外部资源的URL。最简单的可视化方法可能是使用“书签”例如,此设计的一个重要因素是向单个用户显示这些记录。别忘了,您可能需要根据您的目的处理“孤立”URL。也就是说,您为用户创建URL,然后删除该用户,留下一个没有用户的URL。您需要处理此问题吗?