mongodbからmysqlへの移行では、アプリケーションの設計時にmongodbの柔軟性が失われます。 正規化について知ることができるthis bookをお勧めします。
あなたの例では、(ユーザーが多くのプロジェクトで動作します)この多くに多くの(ユーザーはただ一つのプロジェクトに取り組んでいます)、あるいは多くの1つの関係場合についての十分な情報を与えるものではありません。ユーザーの識別子として「userA」、「userB」などを使用すると、私はこう言っています:
1対多。 - ユーザー(Poject_Id)参照プロジェクト(同上)
が、私は念のためにid属性でvarchar型を使用
create table projects(Id integer PRIMARY KEY, Name varchar(20), Type varchar(20));
create table users (Id varchar(20) PRIMARY KEY, Project_Id integer, FOREIGN KEY fk_proj(Project_Id) REFERENCES projects(Id));
mysql> describe projects;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Id | int(11) | NO | PRI | NULL | |
| Name | varchar(20) | YES | | NULL | |
| Type | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
mysql> describe users;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| Id | varchar(20) | NO | PRI | NULL | |
| Project_Id | int(11) | NO | | NULL | |
+------------+-------------+------+-----+---------+-------+
。
これをMySQLでどのようにクエリしますか?
select p.Id, Name, Type, u.Id as Users from projects as p JOIN users as u on p.Id=u.Project_Id;
それとも
select p.Id, Name, Type, u.Id as Users from projects as p, users as u where p.Id=u.Project_Id;
同じ結果以下のいずれかを選択します。
+----+-------+-------+-------+
| Id | Name | Type | Users |
+----+-------+-------+-------+
| 1 | ProjA | TypeA | UserA |
| 1 | ProjA | TypeA | UserB |
| 1 | ProjA | TypeA | UserC |
| 2 | ProjB | TypeB | Userx |
| 2 | ProjB | TypeB | UserY |
| 2 | ProjB | TypeB | UserZ |
+----+-------+-------+-------+
Mの関係にMの代わりにプロジェクトの識別子を使用してのためにMany.-するために、多くの
ユーザーテーブルを作成する場合は、両方のテーブルのプライマリキー(project.Idとusers.Id)、a属性のタプルをこのテーブルのpkにします。
mysql> describe projects;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Id | int(11) | NO | PRI | NULL | |
| Name | varchar(20) | YES | | NULL | |
| Type | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
mysql> describe users;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| Id | varchar(20) | NO | PRI | NULL | |
+-------+-------------+------+-----+---------+-------+
mysql> describe projects_users;
+------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| Id_Project | int(11) | NO | PRI | NULL | |
| Id_User | varchar(11) | NO | PRI | NULL | |
+------------+-------------+------+-----+---------+-------+
create table projects(Id integer PRIMARY KEY, Name varchar(20), Type varchar(20));
create table users (Id varchar(20) PRIMARY KEY);
create table projects_users(Id_Project integer not null, Id_User varchar(11) not null, PRIMARY KEY pk_projects_users(Id_Project, Id_User));
繰り返しますが、これを照会する1つの方法を選択します。
SELECT p.Id, Name, Type, pu.Id_User as User FROM projects as p join projects_users as pu ON p.Id=pu.Id_Project;
SELECT p.Id, Name, Type, pu.Id_User as User FROM projects as p, projects_users as pu WHERE p.Id=pu.Id_Project;
そして結果
+----+-------+-------+-------+
| Id | Name | Type | User |
+----+-------+-------+-------+
| 1 | ProjA | TypeA | UserA |
| 1 | ProjA | TypeA | UserB |
| 1 | ProjA | TypeA | UserC |
| 1 | ProjA | TypeA | UserY |
| 2 | ProjA | TypeA | Userx |
| 2 | ProjA | TypeA | UserY |
| 2 | ProjA | TypeA | UserZ |
+----+-------+-------+-------+
あなたは、MySQLでクエリを見ることができるようにMongoDBのクエリとは全く異なっています。私はこの説明で私の自己を明確にしたいと思う。
ユーザーが複数のプロジェクトで作業できる場合は、質問に答えてください:http://stackoverflow.com/questions/2923809/many-to-many-relationships-examples –