2

デザイン、効率、スペースの観点から疑問に思っていますが、より良い選択は何ですか?自己結合または2つのテーブルを使用して、それらを結合しますか?

製品設計の詳細を格納するMySQLデータベースがあります。これは、、または特定のdesigner_typeいずれかになります。company_staffcustomer_type

当初、私は2つのテーブルを持つことを考えました。1つはと呼ばれstaff_design、もう1つはと呼ばれcustomer_designます。

どちらの方法でも、design情報はほぼ同じですが、顧客の場合、staff_designが必要としない2つの追加の列があります。1つはIDの外部キーであり、staff_designもう1つはdesign_name(ユーザーとスタッフは追加できません)。これらの2つの列は両方ともNULLである可能性があります。

したがって、これら2つのテーブルがマージされ、テーブルが1つしかないようにデータベースを設計すると、このテーブルには3つの追加の列があり、非常に頻繁にNULLにdesignなる可能性があります。上記の2つの追加の列。(およびFK)。design_typecustomerstaffdesign_namestaff_design

どちらのデザインが良いですか?

私は主にハードディスクの処理を減らすために単一のテーブルの設計に傾倒しています(1つではなく2つの異なるテーブルをフェッチする)。次に、多くの自己結合を使用する必要があります。

専門的に優れたアプローチと考えられるものは何ですか?何千ものデザインがstaff_designersによって保存されると予想されますが、上級者と追加料金のある顧客だけが独自のカスタマイズされたデザインを保存します。したがって、顧客の設計よりもはるかに多くのスタッフの設計が確実に存在することになります。

4

3 に答える 3

2

レコードの桁数はわずか数千であるため、単一テーブルの設計を選択することをお勧めします。それはあなたの人生を楽にするでしょう、そしてテーブルのサイズはテーブルを分割することの最適化を正当化するものではありません。

于 2012-10-02T09:17:36.730 に答える
1

ここにあるのは本質的に継承です(別名、カテゴリ、サブタイプ、一般化階層など)。

それを実装するための3つの可能な方法のうち、「1つのテーブル内のすべてのクラス」を記述しています。それには何も悪いことはありません-それぞれの方法には独自の長所と短所があり、これはあなたの場合には適切だと思われます。

于 2012-10-02T09:22:55.533 に答える
1

それがあなたの生活を楽にするなら、私があなたのデザインをよく理解していれば、すべてを1つのテーブルにマージすることに何の問題もありません。

特に、MysqlデータベースがInnodbエンジンを使用している場合:NULLフィールドはスペースを取りません(または無視できる量、1ビット程度)。

于 2012-10-02T09:05:13.853 に答える