2016-10-11 16 views
1

私はITショップで働いており、私たちのハードウェアインベントリを追跡するデータベースを作成しようとしています。要点は、バーコード化された資産は、デスク、ラック、または何らかの種類のストレージ(棚、パレットなど)の1か所にしか置くことができないということです。資産在庫データベース設計

私はもともとこのようなものを持っていました。

Table Asset(barcode); 
Table Rack(rack_id, rackName); 
Table Desk(desk_id, deskName); 
Table Storage(storage_id, StorageName); 

そして、それぞれの「場所」テーブル(ラック、デスク、ストレージ)のために私は、資産が置かれた場所を追跡するためのテーブルを持っていた:

Table Desk_Item (desk_item_id, desk_id, barcode); 
Table Rack_Item (rack_item_id, rack_id, barcode); 
Table Storage_Item (storage_item_id, storage_id, barcode); 

しかし、私は考えが好きではなかったです資産を追跡するための3つの別々のテーブルを持つこと。そこで、私は位置テーブルを作成する必要があると考えました

Table Location(location_id, barcode); 
Table Rack(rack_id, rackName, location_id); 
Table Desk(desk_id, deskName, location_id); 
Table Storage(storage_id, StorageName, location_id); 
Table Asset(barcode); 

これで、位置テーブルはアセットの場所を記録します。しかし私が奇妙に思うのは、私がLocationテーブルに問い合わせると、私はRack、Desk、Storageをチェックする必要があるということです。それはこれを設計する正しい方法ですか?思考やアド​​バイスを感謝します。

+0

なぜロケーションテーブルが必要なのですか?資産はいつでもどこかにある。それを資産テーブル –

+0

に保存してください。私は、データベースに思考を持ち込んだ場所に資産を物理的に「置く」ことに非常に追いついた。ありがとう。 – Tony

答えて

0

location_typeテーブルが必要です。後で別のlocation_typeようEX追加したい場合は

location_type_id location_type 
     1    Rack 
     2    Desk 
     3    Storage 

これも利点があります:あなたはデシベルを変更する必要がいけない'truck'を、ちょうど、Rackのための新しいtype

し、代わりに、複数のテーブルを追加DeskStorage単一のテーブルlocation

location_id  location_type_id name 
    1     1   'Im a Rack' 
    2     1   'Im another Rack' 
    3     2   'Im just a desk' 

決勝あなたのAssetsテーブル

barcode   location_id 
xxxxxx    1   -- is in first rack 
yyyyyy    2   -- is in the second rack 
+0

私はこれが好きです。私のテーブルは、私が示したものより少し複雑ですが、私はこれらのアイデアをどのように働かせるかを見ていきます。ありがとう。 – Tony