0

我在 PHP 中有一个工作网站,它有一个 MySQL 后端,它有几个用于不同目的的表。该站点基于不同的部分或“环境”,例如错误跟踪器、项目管理等。有一个中央“用户”数据库,其中包含所有用户及其相关详细信息。

在前面提到的每个“环境”中,它们都有自己的一组表,可以在某些字段中指定用户 ID。例如,bugtracker 表有一个名为的列AssignedTo,其中包含分配了错误的用户的用户 ID。

这些“用户 ID”列的字段类型(如AssignedTo示例)与中央用户表中的字段相同UserId,这是一个无符号、零填充的 INT(5) 字段。

现在我有一个来自该站点用户的请求,也允许在某些这些用户 ID 字段中指定用户组。

因此,再次参考AssignedTo示例,现在应该可以将错误分配给用户组,而不是特定用户。

关于 PHP 脚本和数据库布局的最佳方法是什么?UserId现在我将所有这些字段设置为与中央用户表相同的类型,即 INT(5)。但是,我UserGroupId在 UserGroups 表中的字段具有不同的格式,即 INT(3)。

我也可以将此字段设为 INT(5) 字段,但这并不能解决我遇到的第二个问题:如何查看该AssignedTo值是针对特定用户还是针对用户组。

我正在考虑让 UserGroupId 字段从 99999 开始并向下计数,而 UserId 字段从 00001 开始并向上计数,因此假设如果AssignedTo以 9 开​​头,则它是指一个用户组。但这对我来说似乎不是一个干净的解决方案......

有更好的想法吗?谢谢!

4

3 回答 3

3

我想我明白你想说什么。我有个问题。一个用户可以在多个用户组中吗?

我可能会在错误表中添加一列,说明 AssignedTo 值是指 UserID 还是 UserGroupID。

为用户组创建一个单独的表。

如果用户可以属于多个组,则创建一个关联表,例如:AssociationID、UserID、UserGroupID。

否则如果每个用户只能属于一个组,只需在 Users 表中添加一个 UserGroupID 列

于 2012-06-26T15:50:41.000 回答
0

如果我理解正确,我的解决方案是创建两列,而不是让 AssignedTo 列指向用户或用户组。一个指向用户 ID,另一个指向用户组 ID。

于 2013-10-19T19:07:25.617 回答
-1

实际上,工作中的一位同事提出了以下我非常喜欢的解决方案:将字段类型从 INT(5) 更改为 INT(4) UserIdUserGroupId并将不同的字段AssignedTo设置为 INT(5)。现在,在 PHP 代码中,我可以为“UserId”或“UserGroupId”值添加前缀编号,该前缀编号可用于确定该值是引用 UserId 还是 UserGroupId 值。因此,如果该AssignedTo字段是“10005”,则表示它是具有“id:0005”的“用户”。此外,为了防止必须更新所有现有记录,在第一个位置具有“0”的值将被视为用户

在这里使用正/负值的优势在于,在用户表和用户组表中,我仍然可以使用可以自动递增的正“Id”字段。据我所知,负值无法自动递增

于 2012-06-27T14:36:33.463 回答