我目前正在将一个开源聊天工具(AJAX Chat)集成到另一个项目中。现在,该聊天工具默认从一个文件中获取有效的用户和频道,但是当你有一个不断变化的用户数据库时,这显然不是理想的选择。
所以,我想让聊天工具直接从数据库加载用户和频道信息。我的想法是这样设计的(如果你有不同的看法,请告诉我):
- 我们有一些聊天频道(公共频道、营销频道等等) - 然后我们把组分配给频道(比如PR团队1、IT人员等等) - 然后我们有用户,他们是组的一部分,并且在某些情况下直接分配给了频道。
我打算用以下这些表来实现上述设计:
频道表:
注意:分配的组表包含分配给频道的组ID,而分配的用户包含不属于分配组的用户的ID。
组表:
所以,我想让聊天工具直接从数据库加载用户和频道信息。我的想法是这样设计的(如果你有不同的看法,请告诉我):
- 我们有一些聊天频道(公共频道、营销频道等等) - 然后我们把组分配给频道(比如PR团队1、IT人员等等) - 然后我们有用户,他们是组的一部分,并且在某些情况下直接分配给了频道。
我打算用以下这些表来实现上述设计:
频道表:
|----|Channel_Name||Channel_ID||Groups_Assigned||Users_Assigned|----|
|----|---Public---||-----0----||---1,2,3,4,5---||-----3,4------|----|
.
.
.etc...
注意:分配的组表包含分配给频道的组ID,而分配的用户包含不属于分配组的用户的ID。
组表:
|----|Group_Name||Group_ID||Users_Assigned|----|
|----|---Team1--||----0---||------5,10----|----|
.
.
.etc...
很抱歉表格画得不太好。
现在,通过以上的实现,当用户登录时,程序会获取用户ID(从用户表中),然后搜索包含该用户ID的所有组,并最终搜索包含任一组(用户是其中一员)或直接分配给用户的所有频道的通道表。
我的想法是可行的,但似乎有点低效。因为我必须以1,2,3....
的格式存储分配的ID(组和用户),所以我必须使用PHP的explode()
或其他一些可以搜索字符串的PostgreSQL函数。 我可能会存储一组组的数组,然后逐个循环遍历它们,这对我来说似乎非常慢。
或者,我可以为每个用户设置一个布尔列,但这将导致列过多,而且我不想在创建用户时每次都创建新的列。
那么,你们会怎么做呢?如果有人出于某种疯狂的原因同意我的初始想法,那能否帮我弄清楚如何编写代码来实际执行它。
感谢您的时间,祝您有愉快的一天。