MySQL 数据库结构将值推送到一个字段或创建新表

标签 mysql sql database

我试图找出一种场景的最佳数据库结构,其中用户属于一个组织,并且在组织表内有一个字段包含与该组织关联的用户的所有电子邮件。在 users 表中,我有一个 organization_id 外键,它传递与用户关联的组织的值,但在 organization 表上我目前正计划创建一个 members 列,为与该组织关联的每个用户添加电子邮件地址(以逗号分隔)。我计划在检索记录时使用此列作为 WHERE 条件。这是明智的方法吗?还是我应该创建另一个名为 members 的表来关联 usersorganization 表?

这是我的组织表:

CREATE TABLE `organization` (
  `organization_id` int(11) NOT NULL AUTO_INCREMENT,
  `organization_name` varchar(255) DEFAULT NULL,
  `admin` varchar(255) DEFAULT NULL,
  `members` varchar(255) DEFAULT NULL,
  `createdAt` datetime NOT NULL,
  `updatedAt` datetime NOT NULL,
  PRIMARY KEY (`organization_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

这是我的用户表:

CREATE TABLE `user` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `first_name` varchar(255) DEFAULT NULL,
  `last_name` varchar(255) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `createdAt` datetime NOT NULL,
  `updatedAt` datetime NOT NULL,
  `organization_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

最佳答案

由于它是一对多(一个组织有许多用户,但一个用户只能属于一个组织),我会做这样的结构:

user
user_id    first_name  . . . email    org_id
---------------------------------------------
  (PK)                                 (FK)

organization
org_id     org_name . . . 
------------------------------
  (PK)

。 。 。这就是你所拥有的。

要获取组织的所有成员(及其电子邮件或其他信息):

SELECT u.user_id, u.email
FROM user u
WHERE org_id = (whatever value you want)

将 user_id 或电子邮件(或“成员”)插入组织表中将是不必要的重复,因为用户已通过 org_id 链接到组织。您可以从上面的查询中获取组织邮件列表。

如果您有多对多关系,我只会创建成员表。

如果缺少某些内容,请告诉我,我会重新开始。

关于MySQL 数据库结构将值推送到一个字段或创建新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34830912/

相关文章:

php - `where` 子句中的未知列

php - openshift Mysql ip的rhc命令

mysql - 获取表中每个组的最大值

php - MySQL - 预替换

php - 更新列数量

mysql - Derby 安 : Using a cron task on Docker

java - 为什么 Calendar.setTimeZone() 不会影响从数据库检索的日期

java - SQLQuery.list() 返回相同的条目

database - 如何完全删除 MarkLogic 数据库及其服务器和林?

mysql - 插入 ... 在重复 key 更新与截断/插入时