首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sql -是否可以将外键添加到引用同一表中的id列的表中

sql -是否可以将外键添加到引用同一表中的id列的表中
EN

Stack Overflow用户
提问于 2014-09-11 16:26:18
回答 2查看 92关注 0票数 0

我有用户账号系统,需要子账号系统。所以有了“主账号”和可以访问主账号数据的账号。我在想users表中的字段"subaccount“是真还是假。然后根据"parent- account“字段从"parent-account”引用的帐户id中打开数据。

你对此有何感想?

代码语言:javascript
复制
SELECT * FROM users WHERE id = :id
if("SUBACCOUNT" exists){
   SELECT * FROM users WHERE id= :parentaccount
   echo parentaccounddata
   $_session['parentaccount'] = false; //restrict certain features
}
EN

回答 2

Stack Overflow用户

发布于 2014-09-11 17:16:23

可以通过foreign key约束让一个表引用它自己的主键(至少在MySQL中是这样的,但我看不出为什么其他基于SQL语言的数据库不允许这样做)。

然而,我想提出另一种解决方案。添加将连接帐户的新表:

代码语言:javascript
复制
CREATE TABLE `accountConnection` (
  `accountId` int NOT NULL,
  `subAccountId` int NOT NULL,
  PRIMARY KEY (`accountId`, `subAccountId`),
  CONSTRAINT `fkAccountId` FOREIGN KEY (`accountId`) REFERENCES `account` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `fkSubAccountId` FOREIGN KEY (`subAccountId`) REFERENCES `account` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我在示例中使用了MySQL。这种方式允许帐户和子帐户之间的多对多关系,我不确定您是否需要从您的问题中,但这是一个非常灵活的解决方案,即使您现在不需要它,如果您需要更改您的系统以允许它

票数 0
EN

Stack Overflow用户

发布于 2014-09-11 17:16:54

如果每个帐户只有一个父帐户,这是一个非常简单的实现。您希望创建一个包含idparent列的用户表。如果帐户是主帐户,则只需将parent列设置为NULL即可。如果是子账号,可以设置为id

表创建

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `accounts` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    -- other parameters like name, ip, ...
    `parent` int(11) NULL,
    PRIMARY KEY (`id`),
    FOREIGN KEY(`parent`) REFERENCES `accounts`(`id`) ON DELETE CASCADE ON UPDATE CASCADE
) AUTO_INCREMENT=1 ;

检查它是否是主帐户,或者不仅仅是检查parent列是否设置为NULL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25782643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档