我在PHP中使用MySQL后端工作,后端有几个用于不同目的的表。 该网站基于不同的部分或“环境”,如错误跟踪,项目管理等。 有一个中央“用户”数据库,其中包含所有用户的相关详细信息。
在前面提到的每个“环境”中,它们都有自己的一组表,可以在某些字段中指定用户ID。
例如bugtracker表有一个名为AssignedTo
的列,其中包含已分配错误的用户的用户ID。
这些“用户ID”列的字段类型(如AssignedTo
示例)与中央用户表中的UserId
字段相同,后者是无符号的零填充INT(5)字段。
现在我收到本网站用户的请求,也允许在某些用户ID字段中指定用户组。
因此再次向AssignedTo
示例进行审核,现在应该可以为用户组而不是特定用户分配错误。
关于PHP脚本和数据库布局,最好的方法是什么?
现在我将所有这些字段设置为与中央用户表的UserId
相同的类型,即INT(5)。
但是,UserGroups表中的UserGroupId
字段格式不同,INT(3)。
我可以将此字段也设置为INT(5)字段,但这不能解决我遇到的第二个问题:如何查看AssignedTo
值是否为特定用户提供,或者用户组。
我正在考虑让UserGroupId字段从99999开始并向下计数,而UserId字段从00001开始向上计数,因此假设如果AssignedTo
以9开头,则它会向用户组提供。
但这对我来说似乎不是一个干净的解决方案......
有更好的想法吗? 谢谢!
答案 0 :(得分:3)
我想我明白你想说的话。我有个问题。用户可以在多个用户组中吗?
我可能会在bug表中添加一个列,说明AssignedTo值是指UserID还是UserGroupID。
为UserGroups创建一个单独的表。
如果用户可以属于多个组,请创建一个关联表,如:AssociationID,UserID,UserGroupID。
否则,如果每个用户只能属于一个组,只需将UserGroupID列添加到Users表
答案 1 :(得分:0)
如果我理解正确,我的解决方案是将AssignedTo列指向用户或用户组,而不是创建两列。一个指向用户ID,另一个指向用户组ID。
答案 2 :(得分:-1)
实际上,一位正在工作的同事想出了我真正喜欢的以下解决方案:
将UserId
和UserGroupId
字段类型从INT(5)更改为INT(4)。并将AssignedTo
之类的不同字段设置为INT(5)。
现在,在PHP代码中,我可以在“UserId”或“UserGroupId”值中添加前缀号,此前缀号可用于确定该值是否为对UserId或UserGroupId值的影响。
因此,如果AssignedTo
字段为'10005',则表示它是'id'为0005的'用户'。另外,为了防止必须更新所有现有记录,在第一个位置具有“0”的值将被视为用户
这里使用正/负值的优势在于,在Users和UserGroups表中,我仍然可以使用正的“Id”字段,该字段可以自动增量。据我所知,负值无法实现自动递增