我试图找出用户属于一个组织的最佳数据库结构,并且在组织表中有一个字段,其中包含与该组织关联的用户的所有电子邮件。在users
表中,我有一个外键 organization_id
它传递与用户关联的组织的值,但在organization
表上,我目前计划创建一个members
列,该列将为与该组织关联的每个用户添加电子邮件地址(逗号分隔)。我计划将此列用于检索记录的 WHERE 条件。这是这样做的明智方法,还是我应该创建另一个名为 members
的表来关联users
表和organization
表?
这是我的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;
这是我user
表:
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链接到组织。您可以从上面的查询中获取组织邮件列表。
只有当你有多对多关系时,我才会做一个成员表。
如果这缺少什么,请告诉我,我会回到绘图板。