2009-05-17 12 views
0

私はオンラインプロジェクト資産トラッカーを作成していますが、私はMySQLが初めてです。このようなことのためにプロジェクト、ユーザー、資産を追跡する最良の方法は何でしょうか?私は資産、ユーザー、およびプロジェクトの3つのテーブルを持っています。ユーザーはプロジェクトと資産を所有する必要があります。アセットは複数のプロジェクトのメンバーになる可能性があり、プロジェクトは複数のユーザーが見ることができるはずです。階層型MySQL資産トラッキングのベストプラクティス

私が考えた最初の方法は、各プロジェクトに、それがリンクされているすべてのアセットのIDを持つミディアンテキストフィールドを持つことでした。各アセットには、それがリンクされているすべてのプロジェクトIDを持つ中間テキストもあります。私は実際にテキストを解析しなくても、それが添付されているプロジェクト/アセットを調べることなく、検索を行うことはできないので、これは問題です。

解析しない別の解決策は、リンク情報のテーブルを別々にすることです。たとえば、アセットID、プロジェクトID、およびユーザーIDが含まれているアセットテーブルがあり、プロジェクトまたはユーザーの場合は、そのテーブルに別のエントリがあります。ただし、このソリューションには複数のエントリを持つアセットがあります。

これを実行する別の方法は、プロジェクトが作成されるたびにサイトがテーブルを作成し、資産とユーザー情報を格納することです。何千ものプロジェクトがあるかもしれないので、これはデータベースをかなり素早く集めてくれます。テーブルを作成することは、私が知る限り、エントリよりも重いです。

私は第2の解決策に傾いています。より良い方法を知っている人はいますか?

+1

あなたの質問のタイトルは、階層的なデータ(非常に複雑なトピックです)を扱いますが、あなたの質問の本文にはどこにも言及されていません。 –

答えて

2

引用:

は、多分今まで...これは最悪のデザインです

にリンクされていることを、すべての資産 のためにIDを持つ各 プロジェクトのMEDIUMTEXTフィールドを持っています! database relationsにお読みください。緊急時にはcrash courseにしてください。いくつかのexample databasesを見てください。 MS Accessには、あなたが調べることができるかなりまともなテンプレートがあります。

project --- inf:inf --- users 
    asset --- 1:1  --- users 
    asset --- inf:inf --- projects 

多対多の関係は別のテーブルに行くだろう:それはこれらの関係をモデル化することができようにあなたが記述する何

が見えます。

+0

リンクありがとうございます。それはちょうど私が探していた情報の種類です。 – David