나는 다음과 같은 테이블이 있습니다 여기에데이터베이스의 디자인이 효율적입니까?
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 테이블의 모든 서비스를 검색해야합니다.
어떻게 효율적으로 쿼리를 작성할 수 있습니까?
아니면이 표를 다시 디자인해야합니까?
정말 귀하의 질문에 관련되지는 않습니다,하지만 난 당신이 더 이상 latin1''사용하지 권합니다. 문제가 발생할 수 있습니다. 대신 'UTF8'을 사용하십시오. – konsolenfreddy
예. 팁 konsolenfreddy 주셔서 감사. :) 그래서 어떤 종류의 문제가 생길까요? utf-8은 여러 언어를 지원합니다. 그래서, 만약 내 charset이 latin1이고 일본어 데이터를 저장하고 싶다면 문제가 생깁니다. 내가 맞습니까? – Sowmiya
예. 그러나 UTF8로 인코딩 된 웹 사이트에 데이터를 표시하고 비 ASCII 문자를 사용하려는 경우에도 마찬가지입니다. – konsolenfreddy