3

現在、MySQL InnoDB のユーザー データベースの初期段階に取り組んでいます。だから、私はそれを使ってデモンストレーションを助けます。

    Users                       Roles
  ---------------              ---------------
  userid (bigint) PK          >roleid (tinyint) PK
  email  (varchar)             rolename (varchar)
  username (varchar)
  password (char)
 >roleid (tinyint) FK
  created (timestamp)

現在、roleid に基づいて、Role と Users の間に 1 対多の関係を作成しようとしています。このために、私はそれOn UPDATE CASCADEと考えていOn DELETE Restrictます。

それが私がやるべきだと感じていることです。それが正しいかどうかはわかりません。しかし、私はそれについてよりよく理解したいと思っています。

1 対 1 を作成したいとします。それはOn UPDATE Restrictと のようになりOn DELETE Restrictます。それでよろしいですか?

申し訳ありませんが、私はここで完全に混乱しており、リレーショナル モデルのさまざまな設定を分解するチュートリアル、ブログ、または説明を見つけることができません。私がここに持っているものに基づいて、これらのタイプと他のタイプ(多対多、多対1)を説明できる人はいますか?

4

1 に答える 1

4

1つのロールに、そのロールに関連付けられた多くのユーザーを含めることができます。この関係全体foreign keyは、ROLESテーブルを参照するUSERSテーブルで物理的に表されます。

外部キー制約のON UPDATEandON DELETEオプションは、データベースに「参照整合性」を適用するのに役立ちますが、USERSエンティティとROLESエンティティの間の関係をまったく指定していません。

ON DELETE RESTRICTを使用してこの外部キーを作成した場合、キーがUSERSテーブルで使用されていたROLESテーブルからレコードを削除しようとすると、エラーが発生します。これは、存在する論理関係のタイプとは何の関係もありません。これは単なる制約です。

多対多の関係は、1つの外部キーを使用してモデル化することはできません。論理的には、ユーザーが多くのロールを持つことができる場合、ユーザーテーブルにロールIDを保存することは意味がありません。

その場合、間にテーブルを作成し、userid列とroleid列をこのテーブルに配置し、外部キーでそれぞれユーザーとロールに接続します。

USERS         USERS_ROLES     ROLES
userid PK  -  userid FK    
              roleid FK   -   roleid PK        

これは、外部キーの制約に関するMYSQLのマニュアルページです。これは良いリファレンスであり、各オプションの意味を説明しています。

編集:

これは、1対多および多対多の関係タイプに触れました。データベースに1対1のタイプが表示されることはめったにありません(そのような場合、テーブルをマージすることは理にかなっています)。パフォーマンスのためにそれを使用することもあります。このような場合、通常、主キーは両方のテーブルで同じである必要があります。

USERS             USERS_EXTENDED_ATTRIBUTES
userid PK    -    userid PK FK

1-1の関係では、各テーブルに1つのユーザーIDのみが存在する必要があります。

于 2012-06-21T02:32:06.503 に答える