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

MySQL数据库结构将值推送到一个字段或创建新表,mysql,sql,database,Mysql,Sql,Database,我试图找出一个场景的最佳数据库结构,其中用户属于一个组织,并且在组织表中有一个字段,其中包含与该组织关联的用户的所有电子邮件。在users表中,我有一个外键organization\u id,它传递用户关联的组织的值,但在organization表中,我目前正计划创建一个members列,该列将添加电子邮件地址(逗号分隔)对于与该组织关联的每个用户。我计划将此列用于检索记录时的WHERE条件。这是一种明智的方法,还是我应该创建另一个名为members的表,该表将users和organizatio

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

这是我的
组织机构
表:

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;
这是我的
用户
表:

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)
将用户id或电子邮件(或“成员”)插入组织表将是不必要的重复,因为用户已经通过组织id链接到组织。您可以从上述查询中获得组织邮件列表

如果你有多对多的关系,我只会做一个会员表


如果遗漏了什么,请告诉我,我会回到绘图板。

这是多对多关系吗?(一个用户可以属于多个组织吗?)如果是这样,您可能希望有一个成员资格表来记录用户id与组织id的所有配对,而不是在任何一个父表中都有重复的信息。一个用户只能属于一个组织谢谢。如果我在表中插入一个值呢。e、 x.
organization.org\u成员当前包含的值为
test@test.com
然后发生一个插入,附加
test2@test.com
到已经存在的值,因此
organization.org\u成员=test@test.com, test2@test.com
我不喜欢在一个字段中有多个值-以后的工作太多。使用用户表中的org_id,您可以通过上面的查询获取一个组织的所有电子邮件(或任何内容)。编辑的答案(希望)能解释我的想法。@cphill-很高兴能帮忙!