开发者社区> 问答> 正文

构造一个SQL表使其具有匹配项还是返回没有结果更好?

我有一个有趣的设计问题。我正在设计项目的安全性,以允许我们使用不同成本的不同版本的程序,并允许Manager型用户向其他用户授予或拒绝对程序部分的访问。它将基于Web并托管在我们的服务器上。

我为每个“资源”或屏幕使用一个简单的“允许”或“拒绝”选项。

我们将拥有大量资源,并且用户将能够设置许多不同的组来让用户控制访问。每个用户只能属于一个组。

我想到了两种方法,并且很好奇,这对于SQL Server在性能方面会更好。

选项A 在访问表中存在条目表示允许访问。这将不需要数据库中的列来存储信息。如果没有返回结果,则拒绝访问。

我认为这将意味着表较小,但是查询会搜索整个表以确定没有匹配项吗?

选项B 数据库中包含一个控制“允许/拒绝”的位列。这将意味着总会找到一个结果,并且会产生一个更大的表。

有什么想法吗?

展开
收起
心有灵_夕 2019-12-25 21:09:26 839 0
1 条回答
写回答
取消 提交回答
  • 如果只允许/拒绝,那么在用户和资源之间建立一个简单的链接表就可以了。如果在链接表中有一个键入用户资源的条目,则允许访问。

    UserResources
    -------------
    UserId FK->Users
    ResourceId FK->Resources
    
    

    和SQL将是这样的

    if exists (select 1 from UserResources 
    where UserId = @uid and ResourceId=@rid)
    set @allow=1;
    
    

    使用(UserId和ResourceId)上的聚集索引,即使有数百万条记录,查询也将非常快。

    2019-12-25 21:09:49
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载