ディスク容量に関しては、 aVARCHAR
は指定した最大バイト数 (おおまかに) を単純に取り (VARCHAR(16)
常に の 2 倍VARCHAR(8)
)、 anINT
は一定の 4 バイトなどです。行ごとのディスク容量 (マイナス インデックス) を簡単に見積もることができます。 )すべてのフィールドを合計するだけです:
INT id -- 4 bytes
CHAR name(15) -- 15 bytes
TEXT description -- variable, depending on the content
理想的には、同じ文字列を 2 回格納しないようにして、データの重複を回避します。あなたの場合、nameParent
列を親テーブルを指す数値 ID に置き換えるのがおそらく最善です。
とはいえ、インデックスもディスク領域を占有します。これは、フィールドのサイズの約 2 倍の行数を掛けたものです。id
キー ( ) を主キーにしたと仮定しましょうint
。2048 行で、約 16 キロバイトを占めます。
行ごとのテーブルの合計ディスク使用量を見積もるときは、すべてのフィールドのサイズを合計してから、インデックスのサイズを追加します。これにより、大まかな見積もりが得られます。
実は重要な部分
もちろん、ディスク容量はデータベースにとって重要ではありません。代わりに、常にパフォーマンスに重点を置く必要があります。テーブルが非常に大きくならない限り (数百万行)、実際にはまったく問題にはなりません。
特定のケースでperson
は、フィールドid
、parent
およびを含むテーブルを作成するだけname
です。parent
親がいない人のためにフィールドをに設定しNULL
、子供がparent
フィールドを使用して親が誰であるかを指定できるようにします。そうすれば、すべてが 1 つの表にまとめられ、家系全体を表すことができますが、それでも非常に簡単です。