2

ユーザーとプロジェクトを使用してmysqlデータベースを設計する必要があります。他の情報に加えて、プロジェクトテーブルにはプロジェクトがどこにあるかに関する情報が含まれています

  • すべてのユーザーに表示
  • 1つ以上の地理的地域にいるユーザーに表示
  • 選択したユーザーにのみ表示

たとえば、プロジェクトは、リージョン1、5、および8にいるすべてのユーザーだけでなく、リージョン1、5、および8にいないn人の選択したユーザーにも表示できます。

ユーザーの地理的地域はユーザーテーブルに保存されます(例:region:4)

私の質問は、プロジェクトの可視性、プロジェクトリージョン、選択したユーザーをどこに保存するか、および関連するすべてのプロジェクトをユーザーに表示(選択)する方法です。

すべてのプロジェクトのリストをユーザーに表示する必要があります

  • すべてのユーザーに表示されます
  • 彼の地域のためにユーザーに見える
  • プロジェクトを表示するように選択されているため、ユーザーに表示されます

どんな助けでも彼は大いに感謝します、ありがとう!

4

2 に答える 2

0

ユーザー --------* USER_PROJECT* ----- プロジェクト -------*REGION_PROJECT*-----REGION---* ユーザー

USER と PROJECT は、マッピング テーブル USER_PROJECT に多対多で関連付けられています。

USER と REGION は多対 1 の関係です

PROJECT と REGION は、マッピング テーブル REGION_PROJECT に多対多で関連付けられています。

このコメントは、@ somnath の回答を補完するためのものです。コメントにこの関係を追加できませんでした。@somnath、正しく設計したテーブル間の関係が私の回答で説明されることを願っています。

于 2012-05-20T14:18:02.170 に答える
0

これがテーブル構造です。MySQL のバージョンによっては、type=INNODB を ENGINE=INNODB に変更する必要がある場合があることに注意してください。

drop table if exists prjusers;

drop table if exists proj_users;

drop table if exists project_regions;

drop table if exists projects;

drop table if exists regions;

/*==============================================================*/
/* Table: prjusers                                              */
/*==============================================================*/
create table prjusers
(
   id_prjuser           int not null auto_increment,
   id_region            int not null,
   user_name            varchar(100) not null,
   primary key (id_prjuser)
)
type = InnoDB;

/*==============================================================*/
/* Table: proj_users                                            */
/*==============================================================*/
create table proj_users
(
   id_proj_user         int not null auto_increment,
   id_prjuser           int not null,
   id_project           int not null,
   primary key (id_proj_user)
)
type = InnoDB;

/*==============================================================*/
/* Table: project_regions                                       */
/*==============================================================*/
create table project_regions
(
   id_project_region    int not null auto_increment,
   id_project           int not null,
   id_region            int not null,
   primary key (id_project_region)
)
type = InnoDB;

/*==============================================================*/
/* Table: projects                                              */
/*==============================================================*/
create table projects
(
   id_project           int not null auto_increment,
   prj_code             varchar(100) not null,
   global_project       char(1) not null,
   primary key (id_project)
)
type = InnoDB;

/*==============================================================*/
/* Table: regions                                               */
/*==============================================================*/
create table regions
(
   id_region            int not null auto_increment,
   region_name          varchar(100) not null,
   primary key (id_region)
)
type = InnoDB;

alter table prjusers add constraint FK_relationship_12 foreign key (id_region)
      references regions (id_region) on delete restrict on update restrict;

alter table proj_users add constraint FK_relationship_10 foreign key (id_prjuser)
      references prjusers (id_prjuser) on delete restrict on update restrict;

alter table proj_users add constraint FK_relationship_11 foreign key (id_project)
      references projects (id_project) on delete restrict on update restrict;

alter table project_regions add constraint FK_relationship_8 foreign key (id_project)
      references projects (id_project) on delete restrict on update restrict;

alter table project_regions add constraint FK_relationship_9 foreign key (id_region)
      references regions (id_region) on delete restrict on update restrict;

選択ステートメント:

select id_project, prj_code from projects where global_project='Y'
UNION
select projects.id_project, projects.prj_code 
from projects join project_regions on projects.id_project = project_regions.id_project 
join prjusers on prjusers.id_region = project_regions.id_region
where prjusers.id_prjuser = {$_SESSION['id_prjuser']}
UNION
select projects.id_project, projects.prj_code 
from projects join proj_users on projects.id_project = proj_users.id_project
where proj_users.id_prjuser = {$_SESSION['id_prjuser']}

上記は 3 つの UNIONS を実行し、プロジェクト ID とプロジェクト コード (1) はグローバル (1)、ID がセッション変数 (2) に保持されているログイン ユーザーの領域に分類され、すべてのプロジェクトは明示的に生成されます。そのユーザーに割り当てられます。

于 2012-05-20T13:27:28.917 に答える