0

テーブルを含むようにデータベースを設計してreferenceおり、列typeはいくつかの事前定義された値 (例: 、、bookなど) の 1 つです。時間の経過とともに可能な値の範囲を拡大するつもりです (たとえば、タイプを見逃したことに気付いた場合は、それを入力できるようにしたいと考えています)。moviemagazineacademic_paper

最も簡単な解決策は、型を表す文字列をテーブルに格納することです。しかし、これは多くの無駄なスペースをもたらすように思えます。

reference_types私が考えたもう1つの解決策は、type列が外部キーで参照する新しいテーブルを作成することです。これには、有効な外部キーを確保するという追加の利点があるようです (コードのどこかで「magzine」を誤って入力しないようにするため)。文字列比較よりも高速です) だけでなく、参照型が必要な場合は常に結合が必要になるため、アプリケーションが少し遅くなり、おそらくこれらの余分な結合のためにロジックが複雑になります。

この問題のスキーマ設計についてどう思いますか?

4

3 に答える 3

1

参照型に他の情報を追加する場合は、2 番目の方法を使用します。そうでない場合は、最初のものを使用してください。これは、より高速で、格納されている情報が文字列のみであるためです (いつでも一意を選択して、型を取得できます)。詳細については、この記事をお読みください。

于 2012-12-19T05:48:24.153 に答える
1

あなたの2番目の解決策は正しいものです。参照型を格納するセカンダリ テーブルを作成し、外部キーを使用してそれらをリンクします。

この件についてさらに読むために、使用したい検索用語は「データベースの正規化」です。

于 2012-12-19T05:37:49.320 に答える
1

reference_types テーブルを作成します。また、参照テーブルでは整数を使用し、reference_type_name フィールドも追加します。

参照テーブルにクエリを実行して整数キーを取得し、必要に応じて他のテーブルへの結合を実行せずにその名前を出力し、そのテーブルを使用して他の操作を実行し、両方のテーブルを同じ型名で保持することができます。

冗長に聞こえることはわかっていますが、int キーによる単純なクエリを実行し、すべてをまとめる最速の方法です。

于 2012-12-19T05:47:04.150 に答える