동적 SQL에서만 사용됩니다. 또한 여러 테이블을 조인하고 유형에 따라 CASE를 사용할 수도 있지만 테이블은 모두 미리 알려야합니다.
우리는 당신이 달성하려고하는 일에 대해 자세한 내용을 알고 있다면 적절한 디자인을 추천 쉬울 것, 어떤 당신의 디자인은 현재처럼 보이는 이유는 당신이 선택한 그 첫 번째 장소에서 특정 테이블 디자인.
Say you have a table of foods:
id INT
foodtype VARCHAR(50) (right now it just contains 'hotdog' or 'hamburger')
name VARCHAR(50)
Then hotdogs:
id INT
length INT
width INT
Then hamburgers:
id INT
radius INT
thickness INT
은 일반적으로 내가 존재하는 단 하나의 보조 테이블을 제약하기위한 몇 가지 시스템을 추천 할 것입니다 단순하지만, 나는 그것을 밖으로 떠날거야.
SELECT f.*, hd.length, hd.width, hb.radius, hb.thickness
FROM foods f
LEFT JOIN hotdogs hd
ON hd.id = f.id
AND f.foodtype = 'hotdog'
LEFT JOIN hamburgers hb
ON hb.id = f.id
AND f.foodtype = 'hamburger'
이제 그런 일이 코드가 생성 될 수 있음을 볼 수 있습니다 (또는 심지어 즉석에서 매우 느린 프로토 타입 동적 SQL) 테이블 이름과 테이블 메타 데이터에 대한 액세스에 대한
SELECT DISTINCT foodtype FROM foods
주어진 특정 가정에서.
문제는 소비 궁극적으로 누구든지이 쿼리의 결과가 새로운 테이블이 추가 될 때마다 보여주는 새로운 열의 알고 있어야한다는 것입니다.
그래서 질문이 고객/고객의 소비자에게 돌아갑니다. 어떻게 다른 유형을 처리 할 것입니까? 서로 다른 유형이 같은 집합에 속한다는 것은 무엇을 의미합니까? 그리고 서로 다른 유형을 인식해야하는 경우 각 유형에 대해 서로 다른 쿼리를 작성하거나 새로운 유형이 추가 될 때 수동 쿼리를 변경하는 단점은 무엇입니까? @Cade 루에서 알 수 있듯이
이것은 디자인 문제가 더 많은 것처럼 보입니다. 런타임까지 조인을 모르는 경우 어떻게 참조 무결성을 적용 할 수 있습니까? – tomfumb