gpt4 book ai didi

php - MySQL 数据建模 : Multiple user types/Activity/Following

转载 作者:行者123 更新时间:2023-11-29 05:46:29 25 4
gpt4 key购买 nike

我有一个项目,其中有一个站点具有多种用户类型。我在思考这方面的最佳实践时遇到了麻烦。

无论节点类型如何,我都希望能够从您关注的(节点)获取事件。假设节点类型是:

用户:组织:

组织将是一个可以充当用户的实体。写评论,发消息。但是组织是由可以编辑组织信息的用户组成的。组织也可以关注和被关注。

  • A) Users 和 Organizations 应该是单独的表吗?
  • B) 一般来说应该如何存储。
  • C) 如果它们实际上是 2 个表,那么在从您关注的人那里获取事件时如何进行连接?

最佳答案

好的,这是一种可能的方法。

这里的粗略策略是这样的

  • 帐户(即访问凭据)与配置文件(特定于实体的数据)是分开的
  • 帐户确定个人资料的类型
  • 个人资料使用外键链接回他们的帐户。其他相关表(例如评论)将使用 account.account_id 作为它们的外键。然后,查询可以确定在选择其他信息时使用哪个配置文件表。

这是 a quick ERD我敲了美妙的MySQL Workbench工具。

erd http://www.shackpics.com/files/sample_erd_co3zt3y5la0l81g4m530.png

这是工具为这个模型生成的 CREATE 脚本

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `mydb`;

-- -----------------------------------------------------
-- Table `mydb`.`account`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `account` (
`account_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`login` VARCHAR(45) NULL ,
`password` VARCHAR(45) NULL ,
`account_type` TINYINT UNSIGNED NULL ,
PRIMARY KEY (`account_id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`organization_profile`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `organization_profile` (
`organization_profile_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`account_id` INT UNSIGNED NOT NULL ,
`organization_name` VARCHAR(45) NULL ,
PRIMARY KEY (`organization_profile_id`) ,
INDEX `fk_organization_profile_account` (`account_id` ASC) ,
CONSTRAINT `fk_organization_profile_account`
FOREIGN KEY (`account_id` )
REFERENCES `account` (`account_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`user_profile`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `user_profile` (
`user_profile_id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`account_id` INT UNSIGNED NULL ,
`first_name` VARCHAR(45) NULL ,
`last_name` VARCHAR(45) NULL ,
PRIMARY KEY (`user_profile_id`) ,
INDEX `fk_user_profile_account1` (`account_id` ASC) ,
CONSTRAINT `fk_user_profile_account1`
FOREIGN KEY (`account_id` )
REFERENCES `account` (`account_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`xref_user_profile_has_organization_profile`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `xref_user_profile_has_organization_profile` (
`user_profile_id` INT UNSIGNED NOT NULL ,
`organization_profile_id` INT UNSIGNED NOT NULL ,
PRIMARY KEY (`user_profile_id`, `organization_profile_id`) ,
INDEX `fk_xref_user_profile_has_organization_profile_user_profile1` (`user_profile_id` ASC) ,
INDEX `fk_xref_user_profile_has_organization_profile_organization_pro1` (`organization_profile_id` ASC) ,
CONSTRAINT `fk_xref_user_profile_has_organization_profile_user_profile1`
FOREIGN KEY (`user_profile_id` )
REFERENCES `user_profile` (`user_profile_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_xref_user_profile_has_organization_profile_organization_pro1`
FOREIGN KEY (`organization_profile_id` )
REFERENCES `organization_profile` (`organization_profile_id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

注意:我提倡存储纯文本密码。这只是描述关系的示例模型,并未涵盖安全访问凭证存储的细节。

这里的基本策略是您可以任意“给”每个配置文件表一个“account_type”编号。例如,组织为 1,用户为 2

关于php - MySQL 数据建模 : Multiple user types/Activity/Following,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1240833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com