2

idと、データがデータのリストであるフィールドのみを含むテーブルがあります。例えば

--------------
| id | データ|
| 1 | a、b、c、d |
| 2 | a、b、k、m |
---------------

リストデータをフィールドに入れるのは良いデザインではないと思うので、どうすれば再デザインできるのか知りたいのですが。

4

5 に答える 5

2

私の場合、2つのテーブル、つまりマスターテーブルとトランザクションテーブルが必要なのは、一部の詳細がすべてのレコードで同じであり、一部が変更される場合のみです。あなたの場合、idフィールドに関連するものが他にない場合は、1つのテーブルと次の構造で続行できます。

--------------
| id |  data  |
| 1  |   a    |
| 1  |   b    |
| 1  |   c    |
| 1  |   d    |
| 2  |   a    |
| 2  |   b    |
| 2  |   k    |
| 2  |   m    |
---------------

ただし、同じIDレコードで同じになるIDフィールドに関連するものが他にある場合は、2つのテーブルを使用する必要があります。次の場合のように。id、name、dataの3つのフィールドがあります。現在のテーブルは次のようになります

--------------------------
| id |  name    |  data  |
| 1  | testname | a,b,c,d|
| 2  | remy     | a,b,c,d|
--------------------------

新しいテーブル構造は次のようになります。

表1マスター

-----------------
| id |  name    |
| 1  | testname |
| 2  | remy     |
-----------------

表2トランザクション

    --------------
    | id |  data  |
    | 1  |   a    |
    | 1  |   b    |
    | 1  |   c    |
    | 1  |   d    |
    | 2  |   a    |
    | 2  |   b    |
    | 2  |   k    |
    | 2  |   m    |
    ---------------

データベース管理を改善するために、データを正規化する必要がある場合があります。 データベースの正規化は、冗長性と依存関係を最小限に抑えるために、リレーショナルデータベースのフィールドとテーブルを整理するプロセスです。正規化には通常、大きなテーブルを小さな(冗長性の少ない)テーブルに分割し、それらの間の関係を定義することが含まれます。目的は、データを分離して、フィールドの追加、削除、および変更を1つのテーブルで実行し、定義された関係を介してデータベースの残りの部分に伝播できるようにすることです。あなたは以下のリンクでもっと見つけることができます

  1. 3正規形データベースチュートリアル

  2. データベースの正規化

于 2012-06-11T06:45:18.737 に答える
1

テーブルにこれらの2つのフィールドしかない場合は、以下のように1つのテーブルしかないはずです。

id | data

PRIMARY KEY(id,data)それぞれのIDの重複データがないように、複合主キーを使用します。

データは次のようになります

id | data
 1 | a
 1 | b
 1 | c
 1 | d
 2 | a
 2 | b
 2 | k
 2 | m
于 2012-06-11T07:30:25.547 に答える
0

外部キーを持つ2つのテーブルが必要になります。

表1ID

表2idデータ値

したがって、データは次のようになります。

表1:

id
1
2
3

表2:

id | data
 1 | a
 1 | b
 1 | c
 1 | d
 2 | a
 2 | b
 2 | k
 2 | m
于 2012-06-11T06:31:04.467 に答える
0

このタイプの別のテーブルが必要になりますONE to MANY

たとえば、別のテーブルデータマッピングを作成できます。このデータマッピングにはdataIDIDがデータテーブルの列に対してでFOREIGN KEYある列があります。ID

したがって、あなたの例によればID = 1、データマッピングテーブルには4つのエントリがあります。

于 2012-06-11T06:33:43.843 に答える
0

あなたは正しいです、これは良いデータベース設計ではありません。このdataフィールドは原子性の原則に違反しているため、1NFに違反しているため、データの維持とクエリで問題が発生する可能性があります。

デザインを正規化するには、元のテーブルを2つに分割します。それを行うための2つの基本的な戦略があります:非識別を使用することと識別関係を使用することです。


注:id親テーブルにのみ存在し、他のFKが存在せず、少なくとも1つの子がないと親が存在できない場合(つまりdata、元のデザインでは空にできなかった場合)、親テーブルを完全に省略できます。

于 2012-06-11T08:13:26.963 に答える