2012-03-16 12 views
3

私は出版社のデータベースを作成しています。同社には約1300冊の本と約6〜7拠点があります。今、私はすべての場所に在庫アイテムを表示するテーブルを作成しました。テーブルには、ユーザーに次のようになります。mysqlを使った在庫管理のアイデア

Book Name   Location1   Location2   Location3 ...... 
History    20000    3000    4354 
Computers    4000    688    344 
Maths     3046    300    0 
... 

私はすでに、書籍のすべての詳細を保存するブックのテーブルを持って、私はまた、オフィスの情報を持っているオフィスのテーブルを持っています。私は次のように私のデータを保存する場合、私は繰り返しの多い巨大なテーブルになってしまいます上記のような情報を示す在庫管理表作成した場合、今:だから

Column1- Book_ID Column2- Location_ID  Column3- Quantity 
    1     1      20000 
    1     2      3000 
    1     3      4354 
    2     1      4000 
    2     2      688 
    ... 

を、私はこのISNを考えます1300 (Books) X 7 (Locations) = 9100 rowsで終わるようにデータを格納する最善の方法はありません。データを格納するためのより良い方法はありますか?今私は書籍の安定した7列を追加することができますが、私は新しい場所を作成する場合、私は書籍のテーブルに別の列を追加する必要があります。

上記の方法が適していると思われる場合やアドバイスをいただければ幸いです。

+0

正しいインデックスのInnoDBを使用して、サーバとしてのPentium 4を使用している場合を除き、最大10万レコードで問題ないはずです。これと一緒に行く、それは正しい、共通の解決策です。 – Vyktor

+0

最初の提案は、location1、location2、location3列を取り除き、書籍のIDと位置IDと数量を示す子テーブルを持つことです。現在の構造では、場所を追加または削除する場合は、DBを再加工する必要があります。 mysqlを使用する場合は、標準のデータ型を使用してください。これは新しいプラットフォームに簡単に移植できないので、奇妙な列挙型やセットには入り込まないでください。 – Brian

+0

@Vyktor - ペンティアム4でもこの量のデータを扱うことはできません(クエリ量が比較的少ないと仮定した場合) – cdeszaq

答えて

4

いいえ、それはそれを行う最善の方法です。

あなたが持っているものは、書籍と場所の多対多の関係です。これは、ほぼであり、すべてのケースは、データベースに2つの主要なエンティティ間の "結合"テーブルとして格納されています。あなたのケースでは、その関連についての追加情報、つまり「在庫」または「数量」(または、グラフのように考えると、の大きさの接続またはエッジ重み)があります。

だから、と思われるかもしれませんが、あなたは「複製」をたくさん持っているようですが、あなたは本当にありません。他の方法でやろうとすると、多くの場合、の柔軟性が低くなります。たとえば、現在の設計では、データベーススキーマを変更して、別の千種の書籍や別の20の場所を追加する必要はありません。

LocationsテーブルまたはBooksテーブル内のLocationsの中に本の数量を入れようとすると、データベースのレイアウトを変更して使用する可能性のあるコードを再テストする必要がありますそれ。

+0

しかし、別のオフィスを追加するたびに1300行追加されますか? – Namit

+0

一般的にはいですが、オフィスには1300冊の書籍があり、その情報を格納するために1300行が必要なので、大丈夫です。 – Svisstack

+1

必ずしもそうではありません。所与の場所で所与の書籍について量がゼロである場合、行は単に省略することができる。しかし、1300行は何ですか?これはまともなデータベースシステムにとっては本当に何もありません。 –

1

本当にそれを行うには最良の方法です。あなたは9100の独立したデータを格納するので、本当に9100行が必要になります(実際には少なく、数量が0の行は省略できます)。データを配置する別の方法では、を添加した。

2

最も一般的な(そして効果的な)解決策です。 Django、Modxなどのほとんどのフレームワークは、外部キーの関係を使用して、中間テーブルを介してMany2Many関係を実装しています。

テーブルのインデックスを正しく作成してください。

ALTER TABLE stock_management add index (Book_ID), add index (Location_ID) 
関連する問題