2012-01-13 2 views
-1

나는 다음과 같은 테이블이 있습니다 여기에데이터베이스의 디자인이 효율적입니까?

CREATE TABLE `app_ws_common` (                          
      `serviceid` varchar(16) NOT NULL,                        
      `applicationid` varchar(16) default NULL,                      
      `modifieddate` date default NULL,                        
      `version` decimal(1,0) default NULL,                       
      `servicename` varchar(20) default NULL,                      
      `userid` varchar(128) NOT NULL,                        
      PRIMARY KEY (`serviceid`,`userid`),                       
      KEY `table1_isv_fk` (`applicationid`,`userid`),                    
      CONSTRAINT `table1_isv_fk` FOREIGN KEY (`applicationid`, `userid`) REFERENCES `applications` (`applicationid`, `userid`) 
     ) ENGINE=InnoDB DEFAULT CHARSET=latin1 



CREATE TABLE `app_ws_user` (                          
      `serviceid` varchar(16) NOT NULL,                        
      `userid` varchar(128) NOT NULL,                        
      `applicationid` varchar(16) default NULL,                      
      `modifieddate` date default NULL,                        
      `version` decimal(1,0) default NULL,                       
      `servicename` varchar(20) default NULL,                       
      PRIMARY KEY (`serviceid`,`userid`),                       
      KEY `FK_app_ws_user` (`applicationid`,`userid`),                    

      CONSTRAINT `FK_app_ws_user` FOREIGN KEY (`applicationid`, `userid`) REFERENCES `applications` (`applicationid`, `userid`) 
     ) ENGINE=InnoDB DEFAULT CHARSET=latin1 


CREATE TABLE `applications` (     
      `applicationid` varchar(16) NOT NULL,   
      `userid` varchar(128) NOT NULL,    
      `applicationname` varchar(30) default NULL, 
      PRIMARY KEY (`applicationid`,`userid`)  
     ) ENGINE=InnoDB DEFAULT CHARSET=latin1 

CREATE TABLE `external_ws_common` (   
       `serviceid` varchar(16) NOT NULL,   
       `modifieddate` date default NULL,   
       `version` decimal(1,0) default NULL,  
       `servicename` varchar(20) default NULL, 
       PRIMARY KEY (`serviceid`)    
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 


CREATE TABLE `external_ws_user` (   
       `serviceid` varchar(16) NOT NULL,   
       `userid` varchar(128) NOT NULL,   
       `applicationid` varchar(16) default NULL, 
       `modifieddate` date default NULL,   
       `version` decimal(1,0) default NULL,  
       `servicename` varchar(20) default NULL,  
       PRIMARY KEY (`serviceid`,`userid`)  
      ) ENGINE=InnoDB DEFAULT CHARSET=latin1 

:

app_ws_common 표는 모든 사용자에게

app_ws_user 공통되는 모든 응용 프로그램 관련 서비스를 포함 테이블에 관련된 모든 응용 프로그램이 포함을 특정 사용자가 만들고 공통 버전에서 편집 한 서비스.

응용 프로그램 테이블에는 응용 프로그램 목록과 해당 사용자가 포함됩니다.

external_ws_common 테이블에는 모든 응용 프로그램과 독립적이며 모든 사용자에게 공통적 인 서비스 목록이 포함됩니다.

external_ws_user 테이블에는 응용 프로그램에 해당하지 않고 사용자가 '공통'버전의 외부 서비스에서 만들거나 편집 한 서비스 목록이 포함됩니다.

이제는 app_ws_user 테이블의 해당 사용자에 대해 editted 버전이 없는데 app_ws_user 테이블의 모든 서비스와 app_ws_common 테이블의 모든 서비스를 검색해야합니다.

어떻게 효율적으로 쿼리를 작성할 수 있습니까?
아니면이 표를 다시 디자인해야합니까?

+0

정말 귀하의 질문에 관련되지는 않습니다,하지만 난 당신이 더 이상 latin1''사용하지 권합니다. 문제가 발생할 수 있습니다. 대신 'UTF8'을 사용하십시오. – konsolenfreddy

+0

예. 팁 konsolenfreddy 주셔서 감사. :) 그래서 어떤 종류의 문제가 생길까요? utf-8은 여러 언어를 지원합니다. 그래서, 만약 내 charset이 latin1이고 일본어 데이터를 저장하고 싶다면 문제가 생깁니다. 내가 맞습니까? – Sowmiya

+0

예. 그러나 UTF8로 인코딩 된 웹 사이트에 데이터를 표시하고 비 ASCII 문자를 사용하려는 경우에도 마찬가지입니다. – konsolenfreddy

답변

0

희망이 도움 :::

SELECT 
     service_id, service_name 
     FROM app_ws_common awc 
    left join app_ws_user awu on (awc.serviceid=awu.serviceid and awc.applicationid=awu.applicationid) 
UNION 
    SELECT service_id, service_name 
     FROM app_ws_common awc 
    right join app_ws_user awu on (awc.serviceid=awu.serviceid and awc.applicationid=awu.applicationid) 
+0

아니요 작동하지 않습니다. 내 요구 사항은 app_ws_user에 {1, 'aa', 1}, {2, 'aa', 1}이 있고 app_ws_common 테이블에 {1, 'common', 1}, {3, 'common', 1 }. 필터링 된 모든 앱 서비스 목록은 {1, 'aa', 1}, {2, 'aa', 1} 및 {3, 'common', 1}이 (가) _ {serviceid, userid, applicationid} _가되어야합니다. – Sowmiya

+0

나는 이것을 점검하고, 여전히 원하는 결과물을 반환하지 않으면 되돌릴 수있다. –

+0

감사합니다. Sashi Kant :) 위의 쿼리가 작동하지 않았습니다. 나는 어떤 논리를 바로 잡아서 필요한 양식을 만들 수 있었다. – Sowmiya

관련 문제