2016-06-26 15 views
0

私はMySQLの専門家ではなく、私のレベルではかなり複雑なデータベースを設計する必要があります。同じテーブルのサプライヤと顧客の関係

私は今、同じテーブル内のサプライヤー・顧客関係(企業のマクロカテゴリ)を有することからなる直面してる問題:

マクロテーブル

id name   mega_id macro_customer_id 
------------------------------------------ 
1  Furniture  2   2,4,5,35 

私が表現したいです実際にはid 1のマクロエントリには、同じテーブル内に記述されている他のマクロ企業(顧客)が存在します。

これを表す最も良い方法はどれですか?

ありがとうございます!

+2

[**データベースの列に区切られたリストを格納するのは本当に悪いですか?**](http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in-a-database -column-really-that-bad) – 1000111

+1

あなたはマクロのIDと顧客のIDを構成する別のテーブルmacro_customersを持っています – Strawberry

+2

よく示された方法ではありません。関連テーブルやジャンクションテーブルのシュートhttp://stackoverflow.com/a/32620163 – Drew

答えて

0

それが依存:正規化形式を使用するために使用される私たちのすべて(1000111 @示されているように)、しかし、データの用途に応じて、あなたはこの正規化の議論の特定の部分で異なって見えるように選択することができます。

このため、通常のモデルは、次のようになります。

Table userData(id,name) 
    - 1:N table linkTable(id,macro_customer_id) 
     - N:1 table metaData(macro_customer_id,value) 

または:

Table userData(id,name) 
    - 1:N table linkTable(macro_customer_id,id) 

大きな問題は、データが使用されている方法であるが。データがこのユーザーのためのものであり、他の方法で照会されない場合(どこでグループ化してもいい)、シリアル化されたStringとして格納するのは完全に有効な方法です。

0

RDBMS内のエンティティ間の関係は、リレーショナルな方法で格納する必要があります。データベース内のこの関係を気にしているかどうか自分に問い合せてください。macro.idをIDで表されるテーブル/行にリンクするクエリを書く必要がありますか?macro.macro_customer_id?はいの場合は、この関係を(1対多または多対多)別の表に保管する必要があります。

関連する問題