먼저이 질문은 다소 주관적인 질문이지만 제 고객을 교육하는 데 도움이되는 공식 문서가 필요합니다.ID 값 하드 코딩을위한 SQL 모범 사례
배경 - 수백 개의 테이블과 SP가있는 대기업 응용 프로그램으로 모두 ID 테이블을 사용하여 정규화 된 테이블과 외래 키로 깔끔하게 설계되었습니다.
우리 고객은 우리의 생산 Db의 복제본을 사용하여 Crystal Enterprise에서 복잡한 보고서를 작성하는 직원이 있습니다.
회사의 사무실 위치 또는 부서 목록, 사용자의 표준 역할 집합, 다른 개체의 상태 (열기/닫기 등)를 '시스템'기본 정보로 분류하여 저장하는 표가 있습니다.), 기본적으로 자주 변경되지 않는 데이터입니다.
보고서 디자이너와 재무 분석가는 내부에 하드 코드 된 ID 값이 포함 된 쿼리를 작성하고 있습니다. 이 같은 것
나는 여기서 크게 단순화하고 있지만, 근본적으로 모든 장소의 하드 내부 코드 값을 사용하고있다.
SQL 개발자의 경우 이것을 보게되면 분명히 facepalm이이 작업을 수행하지 않기 때문에 내장 된 본능 일뿐입니다.
그러나 놀랍게도 난 이 작업을 수행해서는 안되는 문서 또는 모범 사례 문서를 찾을 수 없습니다.
그들은 값이 변하지 않기 때문에이 작업을 하는게 좋겠다고 주장 할 것입니다.하지만 단일 시스템 내에서 값이 변경되지는 않지만 여러 환경 (스테이징/QA/Dev)에서 변경 될 수 있습니다. 보고 설계 방식이 비 휴대용이 고 단 하나의 격리 된 서버 환경에서만 작동 할 수 있도록하는 방식이 절대적으로 다릅니다.
SQL 전문가는이 접근법을 피해야하는 이유에 대해 내 고객을 교육하는 데 사용할 수있는 더 자세한 정보/기사 등을 가지고 있습니까?
좋은 대답입니다. 나는 그 모든 것에 동의합니다. 실제로 우리는 당신이 이미 묘사 한 바를 정확히 가지고 있습니다. 일치하는 ID/이름 쌍 쌍이 있습니다. 'Select Id from Category WHERE Name ='xxx ''를 변수로 사용하고 그 대신에 사용하는 것은 이해할 수없는 것입니다. 그러므로 거부합니다. 그래서 나는 그들을 지시 할 수있는 견고한 참조가 있기를 희망했습니다. 큰 권위자로부터 나는 이렇게 말할 수있다. 새로운 Azure VM을 가동하고 다른 테이블 값을 시드하고보고가 떨어져 버리는 반면 우리 앱은 그 점을 알기가 어렵습니다. – n4esa
나는 주제에 대한 권위있는 기사가 부족하다는 것을 알았습니다. 정확하게 * 귀하의 질문이 아니지만이 게시물에도 좋은 답변이 있습니다. https://stackoverflow.com/questions/2001375/sql-avoiding-hard-coding-or-magic-numbers – Xedni