2009-06-05 22 views
1

静的データテーブルの設計に関して。表示されるような表に静的データを持つ:SQL静的データ/参照リストIDENTIFIER

  • 通貨(コード、名前)。行の例:米ドル、米ドル
  • 国(コード、名前)。行例:DE、ドイツ
  • XXXObjectType(コード、名前、...追加の属性)
  • ...

は、それがそのように主キーとして別(INTEGER)列を持ってしても意味がありませんすべての外部キー参照はそれを使用するでしょうか? PKとFKとして(Nは小さい通常CHAR(N)、)PKとFK

  • 利用コードとして

    1. 利用の追加INTEGER
    2. 利用コードの場合のみ:

      可能な解決策特定のサイズ以下...どのサイズですか?

    3. その他_______

    何あなたの提案でしょうか?どうして?

    私は通常、INT IDENTITYの列を使用しましたが、非常に短いコードを使用することはUI上でユーザーに表示するのに十分です。その場合、クエリのジョインが1つ少なくなります。

  • 答えて

    7

    INT IDENTITYはここでは絶対に必要ありません。代わりに2桁または3桁のニーモニックを使用してください。小さな、ユニークなプロパティを持たないエンティティがある場合は、合成キーの使用を検討する必要があります。しかし、通貨コードと国コードはそれを行う時間ではありません。

    私はかつて誰かが実際に年表を持っていて、毎年YearIDを持っていたシステムで働いていました。そして、実際には、2001年は3年、2000年は4年でした。だから、はそれほど理解が難しく、何もなかったのです。

    +0

    ありがとうございました。 私はDATEs(YEARSではなく)のテーブルを持っていますが、DATE自体をPKとして使用しています。ここでは、DOW、IsWorkDay(曜日ではない)、PreviousWorkDayなどの複数の事前計算された属性を格納しています。 – van

    +0

    +1。私は私が働いている場所でそれを行います。私はそれが嫌いです。私は国のID 43がその人が米国に住んでいることを意味することを知らない限り、レコードの実際のデータを把握するために、4つまたは5つのテーブルに参加しなければなりません....すべての "最適化" – kemiller2002

    +0

    ルックアップ値の種類あなたが使用している、私はむしろ標準化された略語のセットを探すことを試みるだろう。たとえば、国と通貨コードのISOが表示されます。これはエンドユーザーには非常に直感的です。 –

    3

    ID INTまたはCHARを使用すると、どちらの場合でも参照整合性が保持されます。
    INTは4バイト長であるため、CHAR(4)と同じサイズです。 x <のCHAR(x)を使用すると、CHARキーはINTよりも短くなります。 x> 4のCHAR(x)を使用すると、CHARキーはINTよりも大きくなります。短いキーのために通常は、後者が2バイトのオーバーヘッドを持っているので、VARCHARを使用することを意味します。とにかく、500レコードを持つテーブルについて言えば、INTキーを使ったCHAR(5)の総オーバーヘッドはわずか500バイトに過ぎず、いくつかのテーブルが何百万ものレコードを持つ可能性のあるデータベースにとっては価値のある値です。
    CHAR(4)の代わりにID INTを使用する場合、国や通貨(例:)の数が制限されていることを考慮して(数百、多くても)、さらに、CHAR(4)キーはエンドユーザーにとって覚えやすく、Sqlやデータのデバッグ/テストが必要なときには簡単に使用できます。
    私は通常、自分のテーブルのほとんどにID INTキーを使用しますが、いくつかの状況では、CHARで作られたPK/FKを選択します。国、言語、通貨などです。

    +0

    CHAR(N)列の長さがN未満である場合に問題がありますか?例えば、コードの大部分は4文字( 'GOOD'、 'C​​OOL')ですが、いくつかは短くてもかまいません( 'OK'など)。このデータが取り出されるときに先行/後続のスペースが含まれていると問題が発生する可能性がありますか? – van

    +1

    CHAR(N)はサイズが固定されているので、「OK」値を取得すると、実際には「OK」(N = 4の場合)になります。 SqlServerは末尾のスペースを追加しますが、PK/FKを一貫して定義している場合は、これは問題ではありません。安全であるために、通常はユーザーデータ型を作成します。主キーと外部キーの両方に使用するCHAR(4)としてのudtCodeKey。私は実際にトラブルに遭ったことはありませんでしたが、おそらく私はこれまで運が良かったでしょう。 –

    +0

    2番目の「OK」に「OK__」のような2つの末尾の空白がありますが、そのフォントは明確になりませんでした。 –

    関連する問題