답변:
가장 먼저해야 할 일은 ERD ( Entity-Relationship Diagram )를 만드는 것 입니다. 때로는 명령 줄 도구로 메타 데이터를 간단히 설명 할 수 있지만 시간을 절약하기 위해 다이어그램을 자동으로 생성 할 수있는 도구가 있습니다.
둘째, 각 테이블과 열을 검사하여 저장되는 내용의 의미를 배우십시오.
셋째, 각 관계를 검토하고 테이블이 서로 어떻게 관련되는지 이해해야합니다.
넷째, 사용자 지정 데이터 무결성 적용 또는 계단식 작업을 이해하기 위해 모든 뷰 또는 트리거를 읽습니다.
다섯째, 모든 저장 프로 시저를 읽으십시오. 또한 SQL 액세스 권한이있는 경우이를 읽으십시오.
여섯째, 데이터베이스를 사용하는 응용 프로그램 코드의 일부를 읽습니다. 여기에는 몇 가지 추가 비즈니스 규칙과 데이터 무결성 규칙이 적용됩니다.
업데이트 : 나는 단지 좋은 체크리스트와 함께 흥미로운 기사 " 데이터베이스를 상속 할 때해야 할 9 가지 "를 읽었습니다 .
개요:
데이터 사전은 당신의 친구입니다. 또한 Visio의 리버스 엔지니어링 도구를 사용하여 데이터베이스를 리버스 엔지니어링하고 고유 한 다이어그램 집합을 만들어보십시오. 리버스 엔지니어링은 대화식이므로 다이어그램을 작성하므로 데이터 사전을 읽는 것보다 훨씬 더 매력적입니다. 프로세스의 활성이 장점이며이를 수행하는 것이 매우 편안합니다.
내가하는 대부분의 작업은 데이터웨어 하우징에서 이루어지며, 여기서 소스 시스템 데이터베이스 스키마를 파킹하는 것은 핵심 활동의 일부입니다. 나는 많은 경우에 이런 종류의 일을했으며 실제로 잘 작동한다는 것을 알았습니다.
Visio pro는 그다지 비싸지 않으며 Visio 모델링 엔진을 사용하면 여러 다이어그램간에 모델을 공유 할 수 있습니다. 보너스로, 다이어그램에 누락 된 외래 키를 추가 할 수 있으며 시스템에 대한 유용한 문서 세트를 얻을 수 있습니다.
Bill Karwin의 아이디어 외에도 사용자와 대화하는 것이 좋습니다. 때때로 사용자는 특히 데이터베이스에서보고하는 경우 데이터베이스의 용도에 대해 약간 알고 있습니다.
나는 제안을하는 것 외에는 소프트웨어를 변경하기 위해 많은 것을 할 수없는 벤더의 소프트웨어에 대해 매우 추악한 것을 다루고 있습니다. 나는 항상 물건을 바꾸도록 추진하고 있지만 그것이 통제 할 수 없기 때문에 쓰레기에 갇혀 있습니다.
데이터베이스에는 관계가 없기 때문에 빠르게 사용하기 시작한 것 중 하나는 스키마에 대한 일반적인 이름 쿼리입니다.
--Find Column named like 'blah' in a specific table
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V') AND O.Name like '%TableName%'
ORDER by O.Name
또는
--Find all Columns in DB with name like 'blah'
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V')
ORDER by O.Name
일부 테이블에는 이름이 잘못 지정된 열이 너무 많고 테이블간에 관계를 형성하는 데 사용할 수있는 항목을 찾기 위해 열이 너무 많습니다.
나는 이것이 질문의 재 설계 부분에 큰 도움이되지 않는다는 것을 알고 있지만 나쁜 스키마를 이해하고 해독하는 데 매우 도움이됩니다.
SchemaCrawler 는 추악한 데이터베이스를 쉽게 탐색 할 수있는 몇 가지 기능이있는 데이터베이스 검색 도구입니다. SchemaCrawler에는 "grep"과 같은 기능이있어 정규 표현식을 사용하여 테이블과 열을 검색 할 수 있습니다. 예를 들어, 이름의 일부로 "ACCOUNT"를 사용하여 테이블과 열을 검색 할 수 있으며 어떤 방식 으로든 관련 될 수 있습니다.
SchemaCrawler는 외래 키가없는 경우에도 외래 키 관계를 유추합니다. 일반적인 이름 지정 규칙을 사용하여 "약한 연관"을 찾아서이를 수행합니다. 표는 이름이 일반적으로 복수이지만 열 이름이 아니고 열 이름의 접두어가 _ID 일 수 있습니다. 유추 된 관계를 사용하여 관련 테이블을 찾을 수 있습니다.
디자인이 얼마나 추악하고 디자인에 대한 제어력과 디자인과 상호 작용하는 요소에 따라 다릅니다. 나는 현재 직장에서 몇 년 동안 많은 추악한 데이터베이스와 상호 작용해야했으며 여기에 내가 다루는 방법이 있습니다.
직원 데이터
직원 데이터를 보유하는 데이터베이스가 있습니다. 벤더 데이터베이스이므로 제어 할 수 없습니다. (Un?) 다행히도 직접 액세스 할 수 없습니다. 매일 아침 DTS 덤프를받습니다.
내가 관리 할 수 있었던 최선은 모닝 덤프에서 입력을 제거하는 스크립트를 작성하고 (단어 선택은 의도적이었습니다) 더 유용한 형식으로 마이그레이션하고 스크러빙 된 데이터에서 작업하는 것입니다.
내가 그것을 바꿀 수 있다고해도, 아마도 그렇게하지 않을 것입니다-그 방식대로 설정되어있는 다른 많은 프로그램이 있기 때문에 변경을 강요 할 수 없기 때문입니다.
온라인 교육 데이터
이것은 내 자신의 디자인의 혼란이었다. 저를 돕기 위해 멘토없이 대학에서 신선하게 만들었습니다. 저는 한 번에 조금씩 고쳐 왔습니다. 데이터에 액세스하는 유일한 프로그램을 제어하기 때문에 사이트의 일부를 업그레이드 할 때 데이터베이스 구성을 "업그레이드"합니다. 변환 스크립트를 작성하고 복사본에서 활발하게 테스트하여 변경해야 할 모든 사항을 확인할 수 있습니다.
오랜 과정 이었지만 멋지게 나옵니다.
교실 훈련 데이터
파일럿 프로젝트는 3 개의 다른 데이터베이스의 데이터를 통합하고 있으며, 전임자에 의해 약간 다르게 다르게 설계되었습니다.
그것은 또 다른 느린 과정이었습니다. 데이터에 액세스하는 프로그램을 완전히 제어 할 수 있기 때문에 온라인 교육 데이터처럼 조금씩 변경했습니다.
돌이켜 보면 이것은 깨끗하게 시작하기위한 주요 후보 였을 것입니다 ... 뒷 시야는 항상 20/20입니다.
결국 ...
나는 이것이 얼마나 도움이되었는지 알지 못하고 더 자세히 설명 할 수 있습니다 (회사 법률 yada yada 등). 최종 답변은 "It Depends"입니다.
Schema Spy 는 ERD 생성을위한 정말 유용한 도구입니다.
빌은 훌륭한 대답을했습니다. 테스트 사용자로 사용자 인터페이스에 로그인하고 사용자가 데이터로 무엇을하는지 정확하게 이해하려고 노력할 것입니다. 저장된 procs 또는 디자인의 일부 이유를 이해하는 데 도움이됩니다. 데이터의 의미와 용도를 이해하는 것은 데이터베이스를 이해하는 데 중요합니다.
데이터베이스가 비즈니스 기능 또는 주제에 익숙하지 않은 경우 (비행 계획을 수행하고 이전에는 재무 응용 프로그램에서만 작업 한 경우와 같이) 사용자에게 주제에 대한 일부 읽기 자료를 요청하거나 라이브러리로 이동하십시오. 주제에 대한 자신 또는 인터넷 검색. 주의해야 할 법적 또는 규제 문제가 있는지 사용자에게 문의하십시오. 이 주제의 배경 중 일부는 이상한 디자인 선택으로 보이는 것을 설명 할 수 있습니다.
만약 그것이 벤더 데이터베이스라면 (그리고 나는 정말로 나쁜 것들을 보았습니다) 당신이 할 수있는 일은 벤더에게 그것에 대해 불평하는 것입니다.
사내 구축 된 응용 프로그램의 경우 일반적으로 개발자에게 약간의 교육이 필요하며 성능이 향상되도록 스키마를 변경하기 시작할 수 있습니다. 시간이 걸리며 일반적으로 속도가 느립니다.
필자의 경험에 따르면 수백 GB 또는 TB의 데이터 이동이 그다지 불가능하기 때문에 새로운 데이터베이스를 구축하는 것은 실제로 선택 사항이 아닙니다.
혼자 남겨 두는 것도 일반적으로 옵션이 아닙니다. 데이터베이스의 데이터 양이 증가함에 따라 성능이 나빠질 것입니다 (문제가 발생할 때마다 부여됩니다). 결국 성능이 나빠 사용자가 응용 프로그램을 사용할 수 없습니다.
아 .. 못생긴 데이터베이스, 대기업은 우리가 찾을 더 많은 레거시 데이터베이스입니다.
항상 작동하지는 않지만 노력을 기울이지 않으면 악화 될뿐입니다. 응용 프로그램과 함께 데이터베이스를 다시 디자인하려고하면 데이터 마이그레이션으로 더 많은 작업이 추가 될 수 있지만 성능은 항상 모자에서 꺼내는 마술입니다.
못생긴 여자 친구와 행운을 빕니다;)
Knowledge Transfer 세션 옵션을 사용할 수 있는지 확인하고 가능하면 최대한 활용하십시오.
또한 많은 DBMS에는 유용한 정보 (예 : 외래 키)를 사용하여 데이터베이스 스키마를 그리거나 인쇄 할 수있는 도구가 제공됩니다.
또한 (NXC에서 도난당한) Visio와 같은 도구를 통해 데이터베이스를 리버스 엔지니어링 할 수 있습니다.
쿼리 프로파일 러를 실행하고 프로덕션 시스템에서 어떤 일이 일어나는지 지켜보고 싶습니다. 어떤 테이블이 '핫'하고 어떤 테이블에 대한 쿼리인지 알 수 있습니다.
샌드 박스 서버에 백업 사본을 넣은 후 테스트 쿼리 작성 및 실행을 시작하십시오. 나는 복잡한 시스템을 이해하기 쉽고 이해하기가 쉽지만 항상 이해하기 쉽다.
또한 브라우저 창에서 The Daily WTF를 열고 싶습니다 . 다른 사람의 디자인을 인계받는 것은 대개 "나는 그들이 {WTF}를했다고 믿을 수 없다"는 순간을 수반하며 사람들이 당신의 고통을 이해하는 곳으로가는 데 도움이됩니다.