0

私は、さまざまな目的のためにいくつかのテーブルを持つMySQLバックエンドを備えたPHPで作業しているWebサイトを持っています。このサイトは、バグトラッカー、プロジェクト管理などのさまざまな部分または「環境」に基づいています。すべてのユーザーと関連する詳細を含む中央の「ユーザー」データベースが 1 つあります。

前述の「環境」のそれぞれには、独自のテーブル セットがあり、特定のフィールドでユーザー ID を指定できます。たとえば、bugtracker テーブルには、AssignedToバグが割り当てられたユーザーのユーザー ID を含む という列があります。

これらの「ユーザー ID」列のフィールド タイプ (AssignedTo例のように) は、中央のユーザー テーブルのフィールドと同じUserIdで、署名されていない、ゼロで埋められた INT(5) フィールドです。

現在、このサイトのユーザーから、特定のユーザー ID フィールドでユーザー グループを指定できるようにしてほしいというリクエストが寄せられています。

もう一度AssignedTo例を参照すると、特定のユーザーではなく、ユーザー グループにバグを割り当てることもできるはずです。

PHP スクリプトとデータベース レイアウトに関して、これを行う最善の方法は何ですか? UserIdここで、これらすべてのフィールドを、中央のユーザー テーブルの INT(5)と同じタイプに設定しました。ただし、UserGroupIdUserGroups テーブルのフィールドは、異なる形式の INT(3) です。

このフィールドを INT(5) フィールドにすることもできますが、2 番目の問題は解決しません。AssignedTo値が特定のユーザーを参照しているか、ユーザーグループを参照しているかを確認する方法です。

UserGroupId フィールドを 99999 か​​ら開始して下方向にカウントすることを考えていましたが、UserId フィールドは 00001 から開始して上方向にカウントするため、AssignedTo9 で始まる場合はユーザーグループを参照していると想定します。しかし、これは私にはきれいな解決策のようには思えません...

より良いアイデアはありますか?ありがとう!

4

3 に答える 3

3

私はあなたが言おうとしていることを理解していると思います。質問があります。ユーザーは複数のユーザーグループに所属できますか?

バグ テーブルに、AssignedTo 値が UserID または UserGroupID のどちらを参照しているかを示す列を追加することになるでしょう。

UserGroups 用に別のテーブルを作成します。

ユーザーが複数のグループに所属できる場合は、AssociationID、UserID、UserGroupID などの関連付けテーブルを作成します。

それ以外の場合、各ユーザーが 1 つのグループにのみ属することができる場合は、UserGroupID 列をユーザー テーブルに追加するだけです。

于 2012-06-26T15:50:41.000 に答える
-1

実際、職場の同僚が、私が本当に気に入っている次の解決策を思いつきました: UserIdandUserGroupIdフィールドの型を INT(5) から INT(4) に変更します。AssignedToINT(5) に設定するなど、さまざまなフィールドをそのままにしておきます。PHP コードで、'UserId' または 'UserGroupId' 値にプレフィックス番号を追加できます。このプレフィックス番号を使用して、値が UserId または UserGroupId 値を参照しているかどうかを判断できます。したがって、AssignedToフィールドが「10005」の場合、それは「id: 0005」の「ユーザー」であることを意味します。また、既存のすべてのレコードを更新する必要がないように、最初の位置に「0」がある値はユーザーと見なされます

ここで正/負の値を使用する場合の利点は、Users テーブルと UserGroups テーブルの両方で、自動インクリメントのままにしておくことができる正の「Id」フィールドを引き続き使用できることです。私の知る限り、負の値では自動インクリメントは不可能です

于 2012-06-27T14:36:33.463 に答える