문제

어떤 데이터베이스 테이블 스키마가 더 효율적이며 그 이유는 무엇입니까?

"Users (UserID, UserName, CompamyId)"
"Companies (CompamyId, CompanyName)"

또는

"Users (UserID, UserName)"
"Companies (CompamyId, CompanyName)"
"UserCompanies (UserID, CompamyId)"

사용자와 회사가 일대일 관계에 있다는 사실을 고려하면.

도움이 되었습니까?

해결책

확실히, 해당 제약 조건을 고려할 때 이전 것이 더 효율적입니다.동일한 정보를 얻으려면 쿼리에 조인 수가 적어집니다.

다른 팁

글쎄요, 그건 개방형 질문이고 귀하의 비즈니스 규칙에 따라 다릅니다.첫 번째 옵션을 사용하면 한 회사만 한 사용자에게 매핑될 수 있습니다.다대일 관계를 정의하고 있습니다.

두 번째 스키마는 여러 사용자를 여러 회사에 매핑할 수 있는 다대다 관계를 정의합니다.

이들은 다양한 문제를 해결하며 해결하려는 내용에 따라 사용해야 할 스키마가 결정됩니다.

엄밀히 말하면 "트랜잭션" 관점에서 볼 때 첫 번째 스키마는 회사에 연결될 사용자 개체에 대해 하나의 행만 커밋하면 되고 사용자가 근무하는 회사를 검색하려면 하나의 조인만 필요하기 때문에 더 빠릅니다. 그러나 비즈니스 요구 사항이 변경되고 여러 회사가 사용자에게 할당되어야 하는 경우 두 번째 솔루션이 더 잘 확장됩니다.

언제나 그렇듯이 상황에 따라 다릅니다.저는 개인적으로 1번 답변을 선택하겠습니다. 왜냐하면 조인 횟수가 적고 유지 관리가 더 쉽기 때문입니다.조인이 적다는 것은 테이블과 인덱스 스캔이 덜 필요하다는 것을 의미합니다.

SELECT userid, username, companyid, companyname
FROM companies c, users u
WHERE userid = companyid

것보다 훨씬 낫습니다...

SELECT userid, username, companyid, companyname
FROM companies c, users u, usercompanies uc
WHERE u.userid = uc.userid
AND c.companyid = uc.companyid

두 스키마는 서로 다른 관계를 갖고 있기 때문에 비교할 수 없습니다. 테이블에 대한 사양이 무엇인지 확인한 다음 어느 것이 필요한 관계에 맞는지 알아내야 합니다.

첫 번째는 사용자가 다음의 구성원만 될 수 있음을 의미합니다. 하나 회사(속함 관계).두 번째 스키마는 사용자가 여러 회사의 구성원이 될 수 있음을 의미합니다(has_many 관계).

has_many 관계를 지원할 수 있는(또는 나중에 지원할) 스키마를 찾고 있다면 두 번째 관계를 선택하는 것이 좋습니다.그 이유는 다음과 같습니다.

//select all users in company x with schema 1
select username, companyname from companies
inner join users on users.companyid = companies.companyid
where companies.companyid = __some_id__;

그리고

//select all users in company x with schema 2
select username, companyname from companies
inner join usercompanies on usercompanies.companyid = companies.companyid
inner join users on usercompanies.userid = users.userid
where companies.companyid = __some_id__;

선택 테이블에 추가 조인이 있습니다.소속 관계만 원하는 경우 두 번째 쿼리는 필요한 것보다 더 많은 작업을 수행하므로 효율성이 떨어집니다.

각 사용자에 대해 고유한 회사를 계획하지 않는 한 사용자와 회사에 관해서는 "다대일"을 의미한다고 생각합니다.

귀하의 질문에 대답하려면 첫 번째 접근 방식을 따르십시오.저장할 테이블이 하나 줄어들면 공간이 줄어들고 쿼리에서 JOIN 명령을 덜 사용하게 됩니다.또한 더 중요한 것은 원하는 입력이 정확하게 일치한다는 것입니다.데이터베이스 스키마는 모든 유효한 데이터의 형식을 설명해야 합니다. 형식에 적합하면 유효한 것으로 간주됩니다.사용자는 회사를 하나만 가질 수 있으므로 두 번째 스키마를 사용하는 경우 데이터베이스에 잘못된 데이터가 있을 수 있습니다.

사용자와 회사가 실제로 1-1 관계가 있는 경우 테이블 하나만 필요합니다.

(ID, UserName, CompanyName)

하지만 나는 당신이 정말로 일대다 사용자와 회사 간의 관계 - 회사에는 한 명 이상의 사용자가 있지만 회사에는 단 한 명의 사용자만 있습니다.이 경우 두 테이블 솔루션이 정확합니다.

있는 경우 다대다 관계(한 회사에 여러 사용자가 있을 수 있고 한 사용자가 여러 회사에 연결될 수 있음)이면 3테이블 솔루션이 맞습니다.

참고하세요 능률 여기서는 실제로 문제가 아닙니다.어떤 솔루션을 사용해야 하는지 결정하는 것은 데이터의 특성입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top