0

私にはユーザーの役割があります。

ユーザーは複数の役割を持つことができます。というテーブルがありますusers_roles

私は3つの列を持っています- id、、、。userrole

id自動インクリメント列です。

それで、

  1. idコードで列を使用することはないので、列を削除することをお勧めしますか?

  2. はいの場合、このテーブルのインデックスはどの列にする必要がありますか?それとも、インデックスをまったく持たないようにする必要がありますか?

4

3 に答える 3

0

user が userid の場合、id 列は必要ないことに同意します。userid をインデックス付き PK にすることができます。

user がユーザーの名前である場合は、id を保持するか、user_id を作成して、インデックスに有効なキーを取得できるようにする必要があります。

于 2012-07-19T04:55:24.493 に答える
0

「id」フィールドを削除することを想定している場合、ユーザーと user_roles テーブルの間の関係をどのように作成するか。

主キーを定義することを常にお勧めします。主キーを定義すると、デフォルトの索引が作成されます。そして、それは何らかの形でパフォーマンスを向上させます。

また、外部キーを定義すると、外部キー インデックスも生成されます。したがって、テーブル クエリの実行が高速になります。

これがあなたの最初の答えです: あなたの要件によると、現時点では user_roles テーブルから「id」主キーを削除できます。これは、ユーザーとロールの間の関係テーブルとしてのみ使用されるためです。しかし、ほとんどの PHP フレームワークでは、リレーションシップ テーブルであっても主キーを削除することはお勧めできません。

これが 2 番目の答えです。主キーを削除する場合は、「user」フィールドと「role」フィールドのインデックスをforeignKey インデックスとして維持する必要があります。また、user_roles テーブルから主キーを削除しない場合。次に、「id」、「user」、および「role」フィールドに対して 3 つのインデックスが生成されます。最初のインデックスがプライマリ インデックスになり、残りの 2 つはforeignKey インデックスになります。

テーブルに追加のインデックスを明示的に定義すると、クエリの実行時に余分なオーバーヘッドが発生します。

于 2012-07-19T05:11:57.333 に答える
0

users_roles多多リンクテーブルです。

多対多テーブルの主キーには、少なくとも 2 つの一般的な方法があります。

  • users_rolesここの場合のように、独自の代理主キーを持っています ( users_roles.id)
  • または、(ユーザー、ロール) で構成される複合キーを作成します。これは、ユーザーが同じロールに複数回存在するべきではないためです。

単一の主キーが複合キーよりも優れている理由など、単純なキーと複合キーに関する多くの議論があります。

インデックスと主キーは異なる概念であることに注意してください。主キーは一意性のため、インデックスはパフォーマンスのためです。(1 つのテーブルに複数のインデックスを設定できますが、PK は 1 つだけです)

あなたが言っているように、他のテーブルが user_roles を参照していない場合、実際には主キーは必要ありません。

テーブルが大きくなった場合users_roles、たとえば特定の役割のユーザーを頻繁に検索する場合など、ユーザー列にインデックスを追加したり、場合によってはロール テーブルにもインデックスを追加したりすることがあります。

于 2012-07-19T05:12:24.993 に答える