0

ユーザーがさまざまなタイプになることを可能にするWebサイトがあります。これらの各タイプは、特定のことを行うことができます。すべてのユーザーに対して 1 つのテーブルを設定し、型を列挙型に格納するか、または型ごとに異なるテーブルを作成するかを尋ねています。ここで、タイプだけが異なる場合は、テーブルを 1 つだけ使用して簡単に選択できます。ただし、ここにシナリオがあります。

4 人のユーザーは、A、B、C、D です。

ユーザー A には次のデータがあります。

  • 名前
  • Eメール

ユーザー B には次のデータがあります。

  • 名前
  • Eメール
  • 電話

ユーザー C には次のデータがあります。

  • 名前
  • Eメール
  • 電話

ユーザー D には次のデータがあります。

  • 名前
  • Eメール
  • 電話
  • 住所

1 つのテーブルを作成する場合、ユーザーごとに異なるフィールドを null のままにしておく必要がありますか? または、ユーザーごとに個別のテーブル全体を作成する必要がありますか?

4

5 に答える 5

2

それらすべてに対して単一のテーブルを作成できれば、はるかに優れています。一部のフィールドはnullableですが。また、ユーザーのタイプごとに追加の列 ( enum ) を追加します。現在の設計を維持する場合、レコードに対していくつかの結合共用体を使用する必要があります。これにより、サーバーに余分なオーバーヘッドが追加されます

CREATE TABLE users
(
    ID INT,
    name VARCHAR(50),
    email VARCHAR(50),
    phone VARCHAR(50),
    about VARCHAR(50),
    address VARCHAR(50),
    userType ENUM()         -- put types of user here
)

もう 1 つの推奨される設計は、2 つのテーブルを作成することです。1 つはユーザー用で、もう 1 つはタイプ用です。ここでの主な利点は、別のタイプのユーザーがいる場合はいつでも、テーブルを変更する必要はなく、ユーザー タイプ テーブルに余分なレコードを追加するだけで、その後ユーザー テーブルによって参照されることです。

CREATE TABLE UserType
(
    ID INT PRIMARY KEY,
    name VARCHAR(50)
)

CREATE TABLE users
(
    ID INT,
    name VARCHAR(50),
    email VARCHAR(50),
    phone VARCHAR(50),
    about VARCHAR(50),
    address VARCHAR(50),
    TypeID INT,
    CONSTRAINT rf_fk FOREIGN KEY (TypeID) REFERENCES UserType(ID)
)
于 2012-11-06T00:08:33.987 に答える
2

基本的なデータベース設計の原則では、共通要素用の 1 つのテーブルと、各タイプのユーザーに固有の属性用に基本テーブルに JOIN された追加のテーブルを提案します。

あなたの例は、単純な継承階層でユーザータイプごとに1つの追加フィールドのみを提案しています。それは実際にデータがどのように見えるか、または単に例として示したものですか? それがあなたの要件の真の表現である場合、(便宜上) 単一のテーブルを使用したくなるかもしれません。しかし、実際の要件がより複雑である場合は、弾丸を噛んで「正しく」実行します。

于 2012-11-06T03:52:05.653 に答える
1

4 つのテーブルを作成してみてください。

Table 1: Name, email
Table 2: Name, phone
Table 3: Name, about
Table 4: Name, address

Name は、4 つのテーブルすべての主キーです。データベースにヌルはありません。列挙型を保存するのではなく、テーブル結合から型を派生させます。

To find all User A select all records in table 1 not in table 2
To find all User B select all records in table 2 not in table 3
To find all User C select all records in table 3 not in table 4
To find all User D select all records in table 4
于 2012-11-06T03:35:26.640 に答える
0

null許容フィールドを持つ単一のテーブルを1つ使用することをお勧めします。そして、役割のようなものの表。

于 2012-11-06T00:10:33.630 に答える
0

データベースの肥大化につながるため、さまざまな人のためにテーブルを作成しないでください。必要なすべてのフィールドを含む 1 つのテーブルを作成することをお勧めします。フィールドを使用しない場合は、null 値を渡します。

于 2012-11-06T00:08:24.337 に答える