Mysql 引用联接表中所有记录或无记录的外键

Mysql 引用联接表中所有记录或无记录的外键,mysql,foreign-key-relationship,composite-key,junction-table,Mysql,Foreign Key Relationship,Composite Key,Junction Table,这似乎是一个理想的特性,但我似乎不知道当外键是主键复合键的一部分时我该如何做 该表是一个简单的连接表,用于引用用户有权访问的User.id和Access.id函数的多对多关系: Column | References user user.id access access.id 因此,每个用户和每个访问级别可以有许多条目。为了简化超级用户的操作,我希望访问权限有一个空值,这意味着他们可以访问每个页面。这是我唯一能知道如何输入一个不引用访问表中某一行的值的方法。问题是MySQL不

这似乎是一个理想的特性,但我似乎不知道当外键是主键复合键的一部分时我该如何做

该表是一个简单的连接表,用于引用用户有权访问的User.id和Access.id函数的多对多关系:

Column |  References
user      user.id
access    access.id
因此,每个用户和每个访问级别可以有许多条目。为了简化超级用户的操作,我希望访问权限有一个空值,这意味着他们可以访问每个页面。这是我唯一能知道如何输入一个不引用访问表中某一行的值的方法。问题是MySQL不允许将空值作为主键的一部分


有没有办法解决主键为NULL的问题,或者有没有其他方法可以引用外键中的每一行或没有行?我能想到的唯一其他解决方法是禁用外键,或者必须为表中的每个access.id添加一行。这两种方法都是不可取的。

可能您的用户表上有一个超级用户标志。您可以将每个超级用户的笛卡尔连接和可用访问ID集合合并到您需要的任何查询中


根据您所做的工作,您也可以不将超级用户的访问权限存储在数据库中,并在代码中对其进行不同的处理——即,一旦您将超级用户设置为SU,则忽略访问检查。但这取决于您的应用程序。

我认为允许NULL,您可以将其与user.id一起作为唯一的组合使用。但我不确定这是否是一个好办法。我的意思是,您可以将超级用户设置存储在列中,然后在代码中使用它。

感谢您的贡献。这个问题对我来说既是理论也是实践,所以我要看看在连接表或关系表的设计上是否可以做些什么,而不是修改代码或添加新表。您不必添加新表,只需修改查询即可。当然,除非您没有超级用户标志,否则在这种情况下,您将无法添加所有访问ID。唯一密钥将无效。这种类型的关系应该让这些字段是一个复合键,这就是问题所在。很抱歉使用唯一的词。我的意思是允许NULL作为主键/复合键的值。