4

私は古いデータベース (オラクル) を移行していますがCountryCodeDeptCodeやのようなテーブルはほとんどなくRoleCodes、それらの主キーは文字列 ( Codes) です。数値列を主キーとして追加することを考えていjoinsます。これらのテーブルはそれほど大きくありません。

これらのテーブルの主キーを番号「1」から開始する必要があるのか​​ 、それとも 100 から開始して b/w テーブル PK を区別できるのか疑問に思っていますが、レポートに表示されるとは思いません。

4

9 に答える 9

3

シーケンスで生成された ID については、簡単に実行できる場合 (データベースなどによって異なります)、異なる値から始めることをお勧めします。コードでそれらを区別するためにこれを使用するべきではありませんが、テストをより合理的にすることができます。

これまで、あるテーブルの外部キーを別のテーブルの外部キーであるのように誤って使用してしまったという状況がありました。ID が偶然にも同じだったので、テストはパスしました。問題を発見した後、最初のシードを変更したところ、テストがより明確になったことがわかりました。

于 2012-07-19T11:06:30.293 に答える
3

テーブルを区別するためにそれを行うべきではありません。それは実際的ではありません。

注文番号の場合のように、すべての主キーが 1 から始まる必要はありません。

于 2012-07-19T11:04:32.400 に答える
2

整数の主キーに切り替えるために使用している理論的根拠は有効ではないようです。元のコード(文字列であると想定)ではなくINTを使用した場合のパフォーマンスの向上は無視できます。PKには常にインデックスが付けられ、文字列または数値のインデックスはインスタントと同じくらい優れています。したがって、本当にINTが必要でない限り、元のデータ型を使用して元のデータを操作したくなるでしょう。データの移行が簡単になります(これは、作業中に考慮する必要があります)。

于 2012-07-19T11:32:29.880 に答える
1

たとえば ERP システムでは、アイテムの特定のグループを表す番号範囲を定義することは非常に一般的です。

これは、より大きな数の位置としても使用できます。

1234567890
   | |
   index 4 - 6 represents region code
   index 7 - 8 represents dept code... 

または、あなたのケースで私が疑うように、同じ場所のパーツ、

1000 - 1999 Region codes
2000 - 2999 DeptCode
3000 - 3999 RoleCode

したがって: いいえ、必ずしも 1 から始まるとは限りません。

より大きな ERP システムには、番号範囲の構成セクションも含まれています。

さて、データベースの観点から:

はい、テーブルには常に主キーが必要です! 1 つあると、平均的なケースでパフォーマンスが大幅に向上します。(ただし、ほとんどのデータベース システムでは、指定しないと、表示されず処理できない DBMS によって設定されます。インデックスを作成する DBMS もありますが、それは別の話です)

于 2012-07-19T11:06:36.167 に答える
1

主キーを保持する開始番号または開始値は関係ないと思います。
重要なのは、結合テーブルの FK で、MAIN テーブルの PK にあるのと同じ値で表されることです。

于 2012-07-19T11:15:29.833 に答える
0

はい、どの整数から始まるかは関係ありません。主な用途は、行を一意に定義し、他のテーブル間の関係を定義することです。

于 2012-07-19T11:11:41.607 に答える
0

主キーがどの int から始まるかは問題ではありません。コードが定期的に更新されないと仮定すると、int がこれ以上高速になるとは思えません。varchar または既知のサイズであることに大きく依存します。

于 2012-07-19T11:04:26.597 に答える
0

個人的には、必要に応じて int または bigInt として定義されたテーブルの主キーとして、フィールド名「Id」を常に持っています。

テーブルが列挙型に一致する場合、ID が任意の数値の EnumeratedType ID と一致することを確認します。したがって、1 から開始する必要はありません。

列挙型と一致しない場合、通常は 1 から始まる自動インクリメント キーを使用しますが、これは必ずしも必要ではありません。

注 - 行数が少ない場合、数値と varchar のインデックス作成の違いはごくわずかです。

于 2012-07-19T11:05:46.407 に答える