我有用户账号系统,需要子账号系统。所以有了“主账号”和可以访问主账号数据的账号。我在想users表中的字段"subaccount“是真还是假。然后根据"parent- account“字段从"parent-account”引用的帐户id中打开数据。
你对此有何感想?
SELECT * FROM users WHERE id = :id
if("SUBACCOUNT" exists){
SELECT * FROM users WHERE id= :parentaccount
echo parentaccounddata
$_session['parentaccount'] = false; //restrict certain features
}发布于 2014-09-11 17:16:23
可以通过foreign key约束让一个表引用它自己的主键(至少在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。这种方式允许帐户和子帐户之间的多对多关系,我不确定您是否需要从您的问题中,但这是一个非常灵活的解决方案,即使您现在不需要它,如果您需要更改您的系统以允许它
发布于 2014-09-11 17:16:54
如果每个帐户只有一个父帐户,这是一个非常简单的实现。您希望创建一个包含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 ;检查它是否是主帐户,或者不仅仅是检查parent列是否设置为NULL。
https://stackoverflow.com/questions/25782643
复制相似问题