ディスク容量に関しては、 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 つの表にまとめられ、家系全体を表すことができますが、それでも非常に簡単です。