2016-07-07 3 views
0

のは、私が(ちょうど例として)次のテーブルを持っていると仮定しましょう: このシナリオをリレーショナルデータベーススキーマで解決するにはどうすればよいですか?

vehicle: {n̲a̲m̲e̲, type} 
vehicle_type: {n̲a̲m̲e̲} // has 'car' and 'ship' 
person: {i̲d̲, age} 
container: {i̲d̲, color} 

は今、私は別々のテーブルで年間ガス消費量を注意したいです。しかし、車や船舶にのみ有効な属性もあります。車は人だけを輸送し、輸送コンテナはコンテナしか輸送できないとしましょう。

  1. 一部は、車や船のいずれかのために意味がありませんが、すべての属性を持つ消費のための1つの大きなテーブルを作成します。

    は今、私は現在、考えることができる2つのソリューションがあります。

    consumption: {v̲e̲h̲i̲c̲l̲e̲_̲n̲a̲m̲e̲, y̲e̲a̲r̲, p̲e̲r̲s̲o̲n̲s̲, c̲o̲n̲t̲a̲i̲n̲e̲r̲s̲, liters} 
    
  2. 複雑さを増す、2つのテーブルを作成しますが、単に有効な属性持つ:私の本当のシナリオでは

    consumption_cars: {v̲e̲h̲i̲c̲l̲e̲_̲n̲a̲m̲e̲, y̲e̲a̲r̲, p̲e̲r̲s̲o̲n̲s̲, liters} 
    consumption_ships: {v̲e̲h̲i̲c̲l̲e̲_̲n̲a̲m̲e̲, y̲e̲a̲r̲, c̲o̲n̲t̲a̲i̲n̲e̲r̲s̲, liters} 
    

を、彼らはnullすることができないため、これらの無効な属性が、その後-のようなダミーの値を持っているでしょうより排他的な属性があるので、ケース2では7つのテーブルのように作成する必要があります。私はまた、消費テーブルのis-aの関係を考えましたが、実際にはあまりうまく動作しないので、私はそれを避けたいと思います。

この問題を解決する方法はありますか?

答えて

0

私は一緒に共通の属性を維持推薦する、と明確な属性を分離:

consumption: {vehicle_name PK, year PK, liters} 
transport_cars: {vehicle_name PK, year PK, persons} 
transport_ships: {vehicle_name PK, year PK, containers} 
関連する問題