여러 테이블에 연결

질문:

데이터베이스(SQL Server) 조회기존 타사 애플리케이션의우리는 assets, 그들의 properties와 더 많은 시계, 예를 들어 managers, 위치...
속성은 전용 테이블에 열거되어 있으며 텍스트 형식의 값을 포함할 수도 있고, 예를 들어 관리자 상세 정보를 찾는 것과 같은 다른 ID 형식의 값을 포함할 수도 있다.어떤 상황에서 모든 자산에는 수백 개의 속성이 있다.속성을 설정하지 않은 경우 테이블assets에 이러한 레코드가 없습니다.
예를 들면 다음과 같은 데모 설정을 참조하십시오.
https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=91ebe7c2387fff056c44e927d0e31d54
목표는 특정한 속성을 포함하여 하나의 기록에 모든 자산을 열거하는 것이다.
자산.
매니저
stby 매니저
단계.
토성

다윗
프로덕션
토성
다윗
프로덕션
화성-n1

다윗
나의 첫 번째 생각은 자산과 그 속성(ID 포함)을 포함하는 임시표를 만들고 두 번째 단계에서 해당하는 키표에 따라 임시표를 연결하는 것이다.전체 검색을 통해 속성과 키표를 연결하는 더 간단한 방법이 있는지 알고 싶습니다.
하는 김에 한마디 하자.이런 데이터베이스 조회 문제는 이름이 있습니까?그럼 해결해줄 거야.

답안

같은 검색에서 여러 개의 연결이 있을 수 있고 심지어 같은 표를 여러 번 사용할 수 있다.
select a.*, 
    m.firstName as Manager, m2.firstName as Stdby_Manager, 
    p3.property_text as Stage
from assets a
left join properties p on p.asset_id = a.unid and p.property = 'manager'
left join managers m on m.unid = p.property_text

left join properties p2 on p2.asset_id = a.unid and p2.property = 'stby-manager'
left join managers m2 on m2.unid = p2.property_text

left join properties p3 on p3.asset_id = a.unid and p3.property = 'stage'

https://dbfiddle.uk/?rdbms=sqlserver_2016&fiddle=d729098bce84b030eed261737179fffa


그러나 모드 디자인은 결함이 있는 실체 속성 값 (EAV) 반모드의 변체를 사용하기 때문에, 이 모드가 더욱 효율적으로 실행될 수 있도록 도와줄 수 있는 좋은 키 관계를 영원히 실행하지 못할 것이다.