[英]sql - Is it possible to add foreign key to table which references to id colum on the same table
我有用户帐户系统,需要子帐户系统。 因此,存在“主帐户”和可以访问主帐户数据的帐户。 我在考虑用户表中“子帐户”字段的正确或错误。 然后根据“父帐户”字段从“父帐户”所引用的帐户ID中打开数据。
你觉得这个怎么样?
SELECT * FROM users WHERE id = :id
if("SUBACCOUNT" exists){
SELECT * FROM users WHERE id= :parentaccount
echo parentaccounddata
$_session['parentaccount'] = false; //restrict certain features
}
可能有一个表通过外键约束来引用其自己的主键(至少在MySQL中如此,但是我看不出为什么其他基于SQL的数据库不允许它使用它)。
但是,我想提出替代解决方案。 添加将连接帐户的新表:
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为例。 这样,您就可以在帐户和子帐户之间建立多对多关系,我不确定您是否需要从问题中获得这种关系,但这是非常灵活的解决方案,即使您现在不需要,即使您现在不需要更改系统以允许它
如果每个帐户只有一个父母,那将是一个非常简单的实现。 您要创建一个具有id
和一个parent
列的用户表。 如果该帐户是主帐户,则可以将parent
列设置为NULL。 如果它是子帐户,则可以将其设置为id
。
表格创建
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 ;
要检查它是否是主帐户,只需检查父列是否设置为NULL。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.