1

現在Users、次の列を持つテーブルがあります。

  1. ユーザーID
  2. 住所

現在、列に IP アドレスを格納していAddressます。先に進むには、たとえば MAC アドレスを保存する必要があります。両方を同じ列に格納し (どちらも) 、アドレスのタイプを示す 1 または 2 でvarcharどのタイプかを示す別の列を用意することをお勧めします。typeOfAddress intまたは、別のnull可能な列を作成する必要があります(既存のものもnull可能に変更します)

4

6 に答える 6

7

いいえ、それは良い習慣ではありません。数十年前に私が最初に言われたことの 1 つは、「コンピューター分野は複数の目的に使用してはならない」というものでした。そうしないと、他の値タイプに使用する別のインジケーター フィールドがない限り、原則としてそれが何を意味するかを知る方法がなく、まったく不必要な誤解のリスクが生じます。

于 2013-03-05T21:47:43.240 に答える
1

別の null 許容列を絶対に作成します。これにより、将来のすべての SQL をこのテーブルに簡単に記述できるようになり、全体的にすべてをより保守しやすくなります。

于 2013-03-05T21:48:38.713 に答える
1

まあ、与えられた情報に基づいて、それは異なります。

ユーザーは IP アドレスと MAC アドレスの両方を持っていますか? その場合、これらのレコードを、ユーザー レコードとの外部キー関係を持つ別のテーブルに配置する必要があります。

回収はどうする?ユーザーに関するデータを取得するときに、これらの値を頻繁に取得する必要がありますか? その場合、それらを同じテーブルに格納し、毎回テーブル結合を避けることが理にかなっている場合があります。

1 つは 用でIpAddress、もう 1 つは 用MacAddressです。このようにして、別の列を参照して把握する必要なく、どのデータがどの列にあるかが明確になります。

于 2013-03-05T21:51:03.023 に答える
0

さらに多くの異なる種類のアドレスを追加する予定がない場合は、2 つの列を使用することをお勧めします。概念的にはシンプルで、クエリも簡単だと思います。しかし、より多くの種類の「住所」を追加しようとしている場合 (それが何であれ)、5 つまたは 6 つの異なる列を持つことは理想的ではないかもしれません。その場合、1 つの address 列と 1 つの address_type 列を使用して、住所タイプを定義するジャンクション テーブルを作成します。

于 2013-03-05T21:49:08.743 に答える
0

新しい列を作成する代わりに、新しいテーブル Address と AddressType を作成し、それらにリンクします。

Users
foreign key address_id

Address
id
value (varchar)
foreign key adress_type_id

AddressType
id
name (varchar)

やり過ぎかもしれませんが、それは良い正規化の練習です

于 2013-03-05T21:52:11.737 に答える
0

推奨される構造は次のとおりです。

  1. ユーザーID
  2. 住所タイプ
  3. 住所

3rd NFだから。

単一のテーブルで単純に複数の列を使用することの欠点は次のとおりです。

  • アドレスでフィルタリングするときは常に「null-handle」を覚えておく必要がある
  • 時間の経過とともに、新しいアドレス タイプが追加されるにつれて、パラダイムは意味を超えて拡大する可能性があります。しかし、変換は考えるにはコストがかかりすぎます。

有効に見えても有効ではない AddressType が誤って入力されるのを防ぐために、FK リレーションシップを使用して AddressType テーブルを追加する必要があります。

理論的には、AddressType ごとに個別のテーブルが作成され、UserId でユーザー テーブルにリンクされます。しかし、それは提示された問題に対してはやり過ぎのように見えます。

于 2013-03-05T21:47:51.307 に答える