3

ユーザープロファイルテーブルがあります。

id int (pk)
user_name varchar(50)
email_address varchar(100)
relationship_status tinyint(1)(FK)

次に、関係テーブルがあります。Relationship は、ユーザー プロファイル テーブルのオプション フィールドです。Relationship_status が選択されていない場合、または Relationship と user_profile の間のテーブルの場合は、NULL 結合を行うのがベスト プラクティスですか。

これは単純な例ですが、結合がオプションの場合、最終的には間に複数のテーブルができてしまいます。これにより、結合が多すぎる可能性があります。ただし、ベストプラクティスではなく、null 結合で問題が発生する可能性があることを読んだことがあります。

4

1 に答える 1

0

テーブル間の関係によって異なります。1 対多または多対多の場合。各ユーザーが 1 つだけの関係ステータスを持つことができる場合、各ユーザーが複数の関係を持つことができる場合は、「テーブル間のテーブル」を実行するよりも「null 結合」を実行します。

1 対多の関係の例:

User Table
- id
- name
- relationship_id

Relationship Table
- id
- type

この場合、リレーションシップ テーブルには「ユーザー」、「管理者」などのデータが含まれ、ユーザーは「ユーザー」または「管理者」のいずれかになることはできますが、両方になることはできません。(この特定のケースでは、リレーションシップ テーブルの id 列が "user" や "admin" のような文字列になることがあります。これにより、結合を行う必要がなくなり、常にユーザー テーブルに存在します)。

多対多の関係の例:

User Table
- id
- name

Relationship Table
- id
- type

User Relationship Table
- user_id
- relationship_id

この場合、ユーザーは複数の関係を持つことができます。関係テーブルには、「編集者」、「レビュー担当者」、「コピーライター」、「管理者」などのデータがあり、各ユーザーはそれらの任意の組み合わせにすることができます (つまり、ユーザー 1 は編集者とコピーライターにすることができます)。

于 2013-05-30T00:19:31.547 に答える