【问题标题】:Acquiring results from a foreign key reference从外键引用中获取结果
【发布时间】:2013-06-17 13:54:55
【问题描述】:

我正在尝试建立一个数据库来保存/维护一组用户权限。我也在使用 Microsoft SQL Server Management Studio。

我创建了一个帐户表,PK= UserId。

我用 PK=ProfileId 创建了一个 Profiles 表

我使用以下 SQL 语句创建了一个 UserPrivileges 表

CREATE TABLE UserPermissions 
(
    UserId int REFERENCES Accounts (UserId),
    ProfileId int REFERENCES Profiles (ProfileId),
    PRIMARY KEY (UserId, ProfileId)
)

但是,当我从 UserPrivileges 表中执行 Select 查询时,即使我在前 2 个表中确实有一些条目,也没有返回任何内容。

根据我对外键的理解,它们的值取自引用的表。既然引用的表确实有条目,为什么没有输入到 UserPrivileges 表中?

【问题讨论】:

  • 您在 UserPermissions 表中有记录吗?您的模式看起来像 UserPermission 是一个主表,其中 Accounts 和 Profiles 是 Details 表,如果您在 UserPermission 表中没有记录,即使您在两个 Details 表中有记录,您也无法运行选择查询,对于这种情况,您需要正确使用加入您的查询
  • 我正在尝试使用 UserPrivileges 作为交集/联结表来将每个用户连接到权限配置文件
  • 但是我的意思是创建交集表有什么用,为什么不使用外键直接将 Accounts 和 Profile 表相互直接链接?

标签: sql database foreign-keys key


【解决方案1】:

外键只是一个参考。如果并不意味着您不需要表中的条目。你需要他们!但这些条目也必须存在于相关表中。这里有一个很好的解释:http://www.w3schools.com/sql/sql_foreignkey.asp

【讨论】:

    【解决方案2】:

    首先,您没有创建 UserPrivileges 表。您创建了一个 UserPermissions 表。 (如果我们相信您的代码。)

    其次,没有在 UserPermissions 中输入任何行,因为您没有在 UserPermissions 中插入任何行。外键不会使行看起来像魔术一样。 决定哪些行属于 UserPermissions,然后插入它们。

    【讨论】:

    • UserPermissions 是我的意思,我很抱歉。
    猜你喜欢
    • 1970-01-01
    • 2019-11-03
    • 2021-08-26
    • 1970-01-01
    • 2021-11-15
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多