2017-07-13 1 views
0

私は、エンティティテーブルを持っている:私は、エンティティの名前のテーブルを作成しようとしています抽象JavaのスーパークラスオブジェクトのようにSQLテーブルを設計するには?

entityId  indexType (String) 
1    employee 
2    supplier 

nameId  fk_name_entityId  firstName  lastName   
1   2      johnny   appleseed 

私はこのデザインを持っている問題や欠陥は、サプライヤーや商用のものとしてではない、いくつかのエンティティタイプはfirstNamesとlastNamesを持っていけないということです。彼らのビジネス名は1つだけです。

私は、このmySQLデータベースをJavaアプリケーションで使用しています。だから私は抽象スーパークラスを作成することができます。

空の列がたくさんあるので、私はそれが悪いデザインのように感じるので、businessName列を追加したくありません。

-- bad design -- 
nameId  fk_name_entityId  firstName  lastName  businessName  
1   2      johnny   appleseed   
2   8              Apple 

私の質問は: これを行うにはMySQLを使用して最善の方法は何ですか?

+0

hmm姓の別の単語はタイトルですか?なぜ名前をつけて名前を空欄にしておきたいのですか(または名前と姓を使用して後者を空白にしてください) – inarilo

+0

@inariloそれらは個々の例のようです。企業や人に特有の列が他にもたくさんあるかもしれません。 – Barmar

+1

[各製品に多くのパラメータがある多くの種類の製品の製品表を設計する方法](https://stackoverflow.com/questions/695752/how-to-design-a-product-table-for-多くの種類の製品 - それぞれの製品が-m/695860#695860)。 –

答えて

0

これはしばしば処理される方法は、一般的な属性値のテーブルである:この

nameId fk_name_entityId attr_name attr_value 
1  2     firstName Johnny 
2  2     lastName appleseed 
3  8     businessName Apple 

周知の例では、ワードプレスのフレームワークでwp_metaテーブルです。

デザインによっては、attr_nameをこのテーブルに入れるのではなく、有効なすべての属性をリストする別のテーブルの外部キーです。

関連する問題