0

2つのデータベーステーブルに「ステータス」列がありますが、それぞれのステータスタイプは同じです。たとえば、作成者は次のステータスを持つことができます':保留中、アクティブ、無効、一時停止。これらの同じステータスタイプは、公開された記事のステータスに対して機能します。

STATUSの下のいずれかのテーブルにchar()を使用して、リストされている4つのステータスのいずれかを入力するのが適切ですか?テーブルまたは将来のテーブルのいずれかでSTATUS_ID外部キーを使用するだけですか?

4つのタイプのいずれかを入力するだけで簡単ですが、ユーザーエラーの可能性があると思います...

ありがとう

4

6 に答える 6

1

フィールドデータ型を使用enumして、値が事前に選択された値のセットの1つでなければならないことを強制できます。舞台裏では、MySQLは実際にこれらの値を整数表現として保存し、ストレージ要件を節約します。

別のテーブルが必要かどうかは、本当にあなた次第です。許容値のセットが時間の経過とともに動的に変化する必要があると思われる場合は、おそらくそれは理にかなっています(値の1つを強制的に選択するために外部キー制約を設定します)。値が実際にシステム内のある種の実世界のオブジェクトを表し、それらに独自のプロパティ(フィールド)を関連付ける必要がある場合は、別のテーブルに値を含めることでメリットが得られる場合もあります。

于 2013-03-26T21:09:45.533 に答える
0

ステータス列にENUMタイプを使用することを検討しましたか?http://dev.mysql.com/doc/refman/5.0/en/enum.html

于 2013-03-26T21:08:10.950 に答える
0

最も簡単な方法は列挙型データ型です。2番目のテーブルもうまく機能しますが、より複雑です。

于 2013-03-26T21:08:50.203 に答える
0

別のステータスルックアップテーブルがその方法です。結合を追加しているため、実際にはクエリの速度が低下する可能性がありますが、正規化の利点はそれを上回ります。最大の実用的な利点は、ステータス名の変更が非常に簡単になることです。「保留中」を「処理中」に変更する場合は、1つのフィールドを変更するだけです。

于 2013-03-26T21:09:01.547 に答える
0

WHERE句でこの列を頻繁に使用する場合は、別のテーブルを作成することをお勧めします。

于 2013-03-26T21:10:45.673 に答える
0

ステータステーブルの提案は適切であり、一般的な方法です。プログラミングに使用する言語に応じて、enumが適切な代替手段になります。これは、定義したenumタイプのみがデータベースに保存されるようにするのに役立ちます。

PHP:

abstract class STATUS
{
    const pending = 1;
    const active = 2;
    const void = 3;
    const suspended = 4;

    function GetConstants()
    {
        $rc = new ReflectionClass($this);
        return $rc->getConstants();
    }
}

c#

public enum CourseType
{
    pending = 1;
    active = 2;
    void = 3;
    suspended = 4;
}
于 2013-03-26T21:12:07.203 に答える