2011-01-18 17 views
0

タイトルのように、私は1対1の関係から多対多の関係に移動したい3アプリ。1対1の関係から多対多の関係への移動

私は今かなり良いレールですが、私はデータベースと移行についてよく理解していません。

現在、私はプロジェクトとユーザーモデルを持っています。プロジェクトは、ユーザに属し、ユーザは、複数のプロジェクトに属します。 プロジェクトで多数のユーザーが同時にコラボレーションできる状況に移行したいと考えています。

私はhas_manyを設定する必要があると確信しています:関係の種類を通じて、私はどのように私は既存のプロジェクトとユーザーのすべてをこのタイプのシステムに移行することができますか興味があります。

ありがとうございます!

答えて

0

2つのテーブルをリンクする別のテーブルが必要です。これは多対多の関係をサポートする方法です。

新しい表あなたは、単にユーザIDとPROJECTIDを追加することによって、プロジェクトに別のユーザーを追加することができます今すぐ

Projects_Users 
-------------- 
projectid 
userid 

:新しいテーブルはこのようになります

Projects 
---------- 
projectid 
{other columns}  

Users 
------- 
userid 
{other columns} 

:あなたはこのような2つのテーブルを持っていると言いますProjects_Usersテーブルに を追加します。同様に、同じテーブルの1つのプロジェクトに複数のユーザーを追加することができます。

このテーブルの主キーは、複合キーprojectid & useridです。

+1

私は今、関係を設定しました。既存のプロジェクトやユーザーをすべてこの新しい形式に移行するにはどうすればよいですか? – Matt

0

私は今、関係を設定しました。既存のすべてのプロジェクトとユーザーをこの新しい フォーマット テーブルに移行するにはどうすればよいですか?

これは、テーブルの設定方法によって異なります。既存の2つの関係がどのように実装されているか。 ProjectUserのデータが古いテーブルに格納されています。あなたのDDLを投稿してください。単純にINSERT ProjectUser SELECT FROM ...にできるはずです。 FROMを完成させる必要があります。

また、行数も関係します。それが大きければ、それをバッチに分割しなければならないかもしれません。

+0

よく聞こえますが、私のテーブルには現在数千の行があります。私はsqlite3を使用していますが、あなたがDDLを意味するものであるかどうかは分かりません(再び、データベースの知識は限られています)。 – Matt

+1

@Matt千人は非常に小さいです。データ定義言語は、上記のコマンドを完了するために、CREATE TABLE&INDEXステートメントを意味します。 – PerformanceDBA

+1

@Matt。この質問/回答を進める機会はありますか? – PerformanceDBA