0

リレーショナルデータベースの主キーについて質問があります。次のテーブルがあると仮定しましょう。

  • id
  • box_name

BoxItems

  • id
  • 項目名
  • 所属_to_box_id(外部キー)

また、私が1日に何百万ものアイテムを保管するつもりであると仮定しましょう。私はおそらくBoxItems.Idにbigintまたはを使用します。guid

私が考えていたのは、BoxItemsのBigint Idの代わりに、連TinyInt番を使用し、各アイテムを識別するのは、belongs_to_box_idとtinyint行(例:item_numner)の組み合わせです。

したがって、上記の代わりに、次のようになります。

BoxItems

  • 所属_to_box_id
  • item_sequence_number [TINYINT]
  • 項目名

例:

Items.Insert(1,1, "my item 1");
Items.Insert(1,2, "my item 2");

したがって、bigintまたはGUIDを使用する代わりに、tinyintを使用して、多くのディスク領域を節約できます。

そのようなアプローチの短所と長所を知りたいです。MySQLとASP.NET4.5を使用してアプリを開発しています

4

2 に答える 2

0

両方のアプローチについて簡単なテストを作成し、パフォーマンス、ディスク容量、実装の容易さを比較して、判断を下すことをお勧めします。どちらの提案も妥当であり、パフォーマンスに大きな違いがあるとは思えませんが、それを見つけるための最良の方法は、試してみることです。そうすれば、確実にわかります。

于 2012-10-17T21:26:25.973 に答える
0

考えてみると、「ボックス/コンテンツ」の問題と「注文/広告申込情報」の問題に大きな違いはありません。

create table boxes (
  box_id integer primary key,
  box_name varchar(35) not null
);

create table boxed_items (
  box_id integer not null references boxes (box_id),
  box_item_num tinyint not null,
  item_name varchar(35) not null
);

MySQLの場合、おそらくunsignedintegerとunsignedtinyintを使用します。データベースが負の数を回避する理由はありませんが、開発者は驚き最小の原則に頼る必要があります。

256の値で十分であることを確認してください。これを間違えると、毎日数百万行を取得するテーブルで修正するのに費用がかかる可能性があります。

于 2012-10-17T23:07:23.310 に答える