2017-09-18 6 views
-1

に多くの4とSQLテーブルを作成する:私たちはプールを持っている
私はこのようになります.jsonファイル持っている多くの

{ 
    "pool1": { 
     "machine1": { 
      "user1": ["processA"], 
      "user2": ["processB","processA"] 
     }, 
     "machine2":{ 
      "user1": ["processA"] 
     } 
    }, 
    "pool2": { 
     "machine1": { 
      "user1": ["processA"], 
      "user2": ["processB","processA"] 
     }, 
     "machine3":{ 
      "user2": ["processC", "processA"] 
      "user3": ["processD", "processB"] 
     } 
    } 
} 

を、プールがすべてのマシン(1機は、多くのプールにすることができます)
を持っています(同じマシン上で異なるユーザーがプロセスを実行できる)
* 2つ以上のプールにあるマシン同じデータが内部にある

私は私の質問はどのように私はこのようになります。テーブルを作成するんです

class Pool(Base): 
    __tablename__ = "pools" 
    id = Column(Integer, primary_key=True) 
    name = Column(String) 


class Machine(Base): 
    __tablename__ = "machines" 
    id = Column(Integer, primary_key=True) 
    name = Column(String) 


class Process(Base): 
    __tablename__ = "processes" 
    id = Column(Integer, primary_key=True) 
    name = Column(String) 


class User(Base): 
    __tablename__ = "users" 
    id = Column(Integer, primary_key=True) 
    uid = Column(Integer) 
    uname = Column(String) 
SQLAlchemyの

pythonで、このデータからSQLデータベースを構築したい:あなたはONEをしたくない

|pool_id|machine_id|user_id|process_id| 
--------------------------------------- 
|1  |1   |1  |1 
|1  |1   |2  |2 
|1  |2   |2  |1 
|2  |1   |1  |1 
|2  |1   |2  |2 
|2  |3   |3  |4 
|2  |3   |3  |2 
|2  |3   |2  |1 
|2  |3   |2  |3 
+0

使用している特定のRDBMSはありますか? (MSSQL、MySQL、PostgreSQL) – Andrei

+0

私はsqlite3が好きですが、何かが行くでしょう –

答えて

1

これを処理するためには、これらの関係を扱う多くのテーブルが必要になります。そこには、これを行うことができますいくつかの方法があるが、これは私の提案です:私たちはthe second normal formとに付着する可能性が高くなります。各エンティティの異なるテーブルを持つ

  • | User |  | Machine |  | Pools |  | Process | 
    -------------  ----------------  -------------  -------------- 
    | - user_id |  | - machine_id |  | - pool_id |  | process_id | 
    
    
    | machine_users | | user_processes | | pool_machines | 
    --------------------- ------------------- --------------------- 
    | - machine_id (fk) | | - user_id (fk) | | - pool_id (fk) | 
    | - user_id (fk) | | - proc_id (fk) | | - machine_id (fk) | 
    

    マイロジック、この背後にありますエンティティ間の別々のテーブル内のリレーションの作成fourth normal form

  • adhere to the third normal formthe fourth normal formを、そしてfifth normal form

リレーショナルデザインの通常のフォームプリンシパルに広告する以外に、なぜこれがよりうまく機能するのかという明確な理由があります。

  • テーブルをデカップリングし、すべてのリレーション間で完全な外部結合またはクロス積を防止します。これはテーブルの膨らみを減らします。
  • テーブルが分離されているので、後で新しいフィールドを簡単に追加できます。
  • これは、すべてのリレーションがFK/PKで定義されたリレーションによって処理されるため、更新がずっと簡単になります。 id = 1のマシンの名前を更新したいだけなら、簡単なクエリを実行できます。
+0

これはおそらく私たちが与えられた情報からのデータのための最高のアーキテクチャ構造です。 – Andrei

関連する問題