首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的电子邮件组

MySQL中的电子邮件组
EN

Stack Overflow用户
提问于 2011-08-25 13:59:03
回答 3查看 91关注 0票数 0

我有一个小项目,我的数据有一些SQL设计问题。

假设我的DB中有两个表:

代码语言:javascript
复制
Contacts
ID
name
privateemail1
privateemail2
office email

我也有团体

代码语言:javascript
复制
ID
Groupname

将它们链接到一起的最佳方法是什么,以便我也能够在组中使用组的分发列表?

如果我用

代码语言:javascript
复制
ID
GroupID
ContactID

我看不出如何将嵌入的子组与主组相匹配。

组,如

主要乐队,如管弦乐团演奏者;歌手

分组,如风笛手、弦乐手、男歌手、女歌手等。

修正的问题:上面的例子不能涵盖所有的变化.任何组都可以成为子组或主组,如Outlook分发列表?

只要看看我非常感激的评论,我很高兴能看到一个CREATE,和一个DELETE示例。这将带来更多的关注,并希望更多的结果。

我希望这不是太愚蠢的问题,但作为一个初学者,我花了几个小时才发布这篇文章。谢谢你提前提供帮助

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-25 14:06:30

我用一张两用桌子解决了这个问题:

表:小组成员

代码语言:javascript
复制
id
groupID
linktype
linkID

linktype可以是一个文本字段('user','group'),它很好,而且可读性很好(如果您正在进行自己的SQL访问,它可能值得进行小的性能测试),或者您可以使用一个INT字段,其中(1,2)其中每个字段对您都有意义。

要查找第2组中的所有用户:

代码语言:javascript
复制
SELECT linkID as userID FROM groupMemberships 
WHERE groupID=2 AND linktype='user';

查找所有子组:

代码语言:javascript
复制
SELECT linkID as groupID FROM groupMemberships 
WHERE groupID=2 AND linktype='group';

像这样的双表的一个问题是,当您想要获取所有组用户时,但是您不知道它们的子组可能是多少个。如果您可以确定只有一个级别的子组,那么您可以:

代码语言:javascript
复制
SELECT linkID as userID FROM groupMemberships
WHERE groupID=2 and linktype='user'
UNION
SELECT sg.linkID as userID FROM groupMemberships g,groupMemberships sg
WHERE g.groupID=2 AND g.linktype='group' 
  AND sg.groupID=g.linkID AND sg.linktype='user'

如果你有两个层次的子组,你需要两个联盟等等。当您有n子组时,您需要N个联合,这是一个痛苦的编写,而且效率低下。

另一种解决方案是保持contacts表和groups表相同,只需将联系人链接到组表contactsGroups

代码语言:javascript
复制
ID
groupID
userID

现在(在数据库之外),当您将一个用户添加到一个组(windplayers)时,您还会自动地将它们添加到任何父组(管弦乐队)中,这样用户实际上就可以在contactsGroups表中获得两个条目。这具有相同的存储信息,但使数据检索更加容易。您甚至可以将这个子组信息存储在数据库中,尽管您已经拥有了具有对象继承或类似的代码端。

票数 2
EN

Stack Overflow用户

发布于 2011-08-25 14:16:58

我认为user911882的意思是有这样一个模式:

代码语言:javascript
复制
Contacts
- ID
- name
- privateemail1
- privateemail2
- office
- email

Groups
- ID
- Groupname
- ParentGroupID **foreign key which references Groups.ID**

Memberships
- ID
- GroupID
- ContactID
票数 3
EN

Stack Overflow用户

发布于 2011-08-25 14:06:10

通过理解您的问题,您必须将一个表链接到它自己,然后您可以通过在组中添加一个列来链接到该表,让说Pid*,它的数据类型与组中的Id的数据类型相同,然后将其作为引用同一表中ID的foriegn键。我想它能解决你的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7191681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档