我的网站由两种类型的用户组成,普通用户和商业用户和超级管理员。所有这些都列在用户表(名称、电子邮件、密码)中,并添加了 busines_users 表,其中包含业务用户的仅业务相关信息(业务类型、地址等)。
还有一个第三个表格,其中包含该站点的邮件。从普通用户发送到 business_users 或 super_admins(支持等)的邮件。
因此,此邮件表有 2 个 cols(from,to),它们引用的 userID 列是 users 表。这就是问题所在,假设 business_user 删除了他的帐户。我还打算删除他发送的邮件(无论是针对普通用户还是超级管理员)问题是邮件表的结构方式是不可避免的删除上述邮件后,我还将删除 super_admin 的普通用户发送给 HIM 的邮件。
有 2 个场景被检查:
- 根本不删除任何邮件——在这种情况下,讨论到此结束。
- 重新设计数据库,以便发送给他的邮件不会被删除(reg_users 仍然会在他们的屏幕上显示邮件),但另一方面,他发送的邮件会被删除。
你有什么建议?如果使用第二个选项,我应该如何设计数据库。以下是3张表:
CREATE TABLE IF NOT EXISTS `alternative_appointm`.`users` (
`user_ID` INT(11) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR(45) NOT NULL ,
`lastname` VARCHAR(45) NOT NULL ,
`email` VARCHAR(255) NULL DEFAULT NULL ,
`password` VARCHAR(100) NULL DEFAULT NULL ,
`hash` VARCHAR(32) NULL DEFAULT NULL ,
`usertype` ENUM('1','2','3','4') NULL DEFAULT NULL ,
PRIMARY KEY (`user_ID`) ,
INDEX `fk_users_usertype1_idx` (`usertype` ASC) ,
CONSTRAINT `fk_users_usertype1`
FOREIGN KEY (`usertype` )
REFERENCES `alternative_appointm`.`usertype` (`type_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
CREATE TABLE IF NOT EXISTS `alternative_appointm`.`business_users` (
`crID` INT(11) NOT NULL ,
`address` VARCHAR(45) NULL DEFAULT NULL ,
`url` VARCHAR(45) NULL DEFAULT NULL ,
`phone` VARCHAR(20) NULL ,
`city` VARCHAR(100) NULL ,
`municipality` VARCHAR(100) NULL ,
`bus_user_type` ENUM('1','2','3','4','5') CHARACTER SET 'latin1' NULL ,
PRIMARY KEY (`crID`) ,
INDEX `fk_business_users_buz_usertype1_idx` (`bus_user_type` ASC) ,
INDEX `crID` (`crID` ASC) ,
CONSTRAINT `fk_business_users_buz_usertype1`
FOREIGN KEY (`bus_user_type` )
REFERENCES `alternative_appointm`.`buz_usertype` (`Type_id` )
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `fk_business_users_users1`
FOREIGN KEY (`crID` )
REFERENCES `alternative_appointm`.`users` (`user_ID` )
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
CREATE TABLE IF NOT EXISTS `alternative_appointm`.`mails` (
`message-iD` INT(10) NOT NULL AUTO_INCREMENT ,
`from` INT(11) NULL DEFAULT NULL ,
`to` INT(11) NULL DEFAULT NULL ,
`datetime` DATETIME NULL DEFAULT NULL ,
`subject` TEXT NULL DEFAULT NULL ,
`message` TEXT NULL DEFAULT NULL ,
PRIMARY KEY (`message-iD`) ,
UNIQUE INDEX `message-iD_UNIQUE` (`message-iD` ASC) ,
INDEX `fk_mails_users1_idx` (`from` ASC) ,
INDEX `fk_mails_users2_idx` (`to` ASC) ,
CONSTRAINT `fk_mails_users1`
FOREIGN KEY (`from` )
REFERENCES `alternative_appointm`.`users` (`user_ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_mails_users2`
FOREIGN KEY (`to` )
REFERENCES `alternative_appointm`.`users` (`user_ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8