2017-11-03 1 views
0

저는 대부분의 응용 프로그램처럼 데이터베이스를 사용하는 웹 응용 프로그램을 개발하려고합니다. 데이터베이스를 만들려면 데이터베이스에 변경 한 내용이 모두 포함 된 .sql 파일을 작성합니다. 나는 정확히 왜 그런지 모르지만 과거에는 데이터베이스를 비우거나 나중에 수정하면 나중에 변경 사항을 이해하는 것이 어려워졌습니다. 이 데이터베이스 관련 자료를 모두 배우기 때문에 데이터베이스의 첫 번째 레이아웃이 항상 변경됩니다. 모든 변경 사항을 추적하기 위해 나는이 .sql 파일을 만드는 습관을 키 웠습니다.데이터베이스를 만드는 .sql 파일은 어디에 저장해야합니까?

이 파일에서 나는 항상 이미 존재하는 모든 테이블을 삭제하고 새로운 모든 테이블을 생성합니다. 필자는 데이터베이스의 실제 상태에 대한 참조를 항상 확보하기 위해이 작업을 수행합니다. 파일 변경은 명령 행 데이터베이스 도구를 직접 사용하는 것보다 쉽습니다. 첫 번째 질문은 실제로 다음과 같을 것입니다. 실제로 이것이 좋은 연습인가, 아니면 아직 듣지 못한 것을 조직화하는 또 다른 방법입니까?

실제 질문은 다음과 같습니다.이 파일을 어디에 저장합니까? 실제 코드와 동일한 저장소에 저장소를 저장하는 것이 좋습니다. 나는 그것을 git에 모두 넣어야 하는가? 나는 또한 git/github를 클라우드 저장소로 생각한다. 내 하드 드라이브가 불타지면 내가 github에 올려 놓은 이후로 내 모든 프로젝트가 여전히있을 것이다. 거기에 .sql 파일이 없으면 새 데이터베이스를 설정해야합니다.

+0

소스 컨트롤에 저장하지 않을 이유가 없습니다. 결국 응용 프로그램의 인스턴스를 작성하는 데 사용되는 코드입니다. – David

+0

어쩌면 당신 말이 옳고 나는 단지 것들을 overthinking ... 어쩌면 내 마음은 너무 마이크로 서비스의 세계에서 너무 자신의 자식 - repo지고 나는 SQL 파일이 맞는 곳을 모르겠다. 데이터베이스는 자체 서비스입니다. – patsimm

+0

@patsimm FTR, 데이터베이스 스키마를 수정하는 것은 유명한 일입니다. [이것이 왜 그렇게 비쌉니다.] (https://www.red-gate.com/dynamic/purchase/product/sqlsourcecontrol). 나는이 질문이 화제에다는 것을 완전히 납득시키지 않는다. 프로그래밍보다는 개발 방법론에 관한 것입니다. – jpaugh

답변

2

이러한 종류의 코드에 대한 일반적인 범주는 "데이터베이스 마이그레이션"입니다. 이러한 작업을 전문으로하는 도구가 있으며 다양한 웹 응용 프로그램 프레임 워크는 다양한 DB 마이그레이션 도구를 지원하거나 자체 기능을 가질 수 있습니다.

아마도이 카테고리의 Python (SQLAlchemy에 구현 된 모델)에서 가장 많이 사용되는 도구/제품군은 Alembic입니다. 다른 옵션 중 일부는 Flyway, LiquibaseSqitch입니다.

이 모든 경우 데이터베이스 스키마 (SQL, XML, YAML)의 일부 추상화를 관리하고 이러한 도구는 필요한 SQL 및 기타 코드를 생성하여 각 스키마 버전에서 다음 버전으로의 "마이그레이션"을 수행합니다. 프로젝트의 역사 일반적으로 이것은 증분으로 생성됩니다. 처음 데이터베이스 스키마 (아마도 완전히 비어 있음)로 시작하여 스키마를 빌드하고 해당 버전으로 초기화합니다. 그런 다음 각 단계를 통해 빌드하고 마이그레이션하여 원하는 버전에 도달하십시오.

스키마를보다 근본적으로 변경하면이 작업이 임의로 복잡해질 수 있습니다. "NOT NULL"제약 조건없이 테이블에 추가 열을 추가하는 것은 간단합니다. 예를 들어, "NOT NULL"접합 테이블을 통해 새로운 M : N 관계를 추가하고 일부 비정규 화 된 스키마에서 상위 정규형으로 마이그레이션하면 일부 제한 조건을 삭제하고 일부 과도기 상태를 통해 참조 무결성 위반을 허용해야하는 중간 단계가 발생할 수 있습니다.

이 웹 사이트, 자습서, HOWTO 및 기타 문서를 읽고 이러한 도구가 존재하는 이유와 이러한 문제 영역에 접근하는 방법에 대해 더 깊이 이해할 것을 적극 권장합니다.

0

유는 휠을 재발 명하고 있습니다. 당신의 해결책은 DB 스키마를 버전 관리하는 것입니다. 그리고 예, 거의 모든 프레임 워크 에서처럼 변경 사항을 프로젝트 파일에 추가해야합니다. 다음 질문을 읽어 보는 것이 좋습니다. How do you version your database schema?

0

예이 코드는 소스 코드에 꼭 보관해야합니다. 그러나 리포지토리 내의 코드 위치는 개발자 나 개발 팀 또는 관리자가 결정해야합니다. 몇 가지 좋은 옵션은 설치, 설정, SQL 또는 ddl 폴더입니다.

0

네,하고있는 일이 맞습니다.

레일상의 루비와 비교 : 파일 db/schema.rb은 전체 스키마를 포함합니다. 너무 완전한 파일을 가지고있는 것이 좋습니다. 예를 들어 새로운 환경 (예 : 새 테스트 환경)을 쉽게 부트 스트랩 할 수 있습니다. 이 파일은 프로덕션 환경에서 사용되지 않습니다. 모든 데이터를 지울 수 있기 때문입니다.

작은 파일 db/migrations/20171003_add_name_to_person_table.rb 또는 스키마에 대한 점진적 변경 (마이그레이션이라고 함)이 있습니다. 그것들은 데이터 손실없이 기존 환경을 변경하는 데 사용되며, 각 메커니즘이 DB 당 한 번만 실행되도록하는 메커니즘이 있습니다.

무대에서는 수동으로이 모든 작업을 수행하는 것이 완벽합니다. 나중에 필요에 따라 자동화를 시도 할 수 있습니다. 당신이 무언가가 계속 진행되고 있다는 것을 알았을만큼 충분히 좋습니다.

자연스럽지 않은 곳에서 코드 저장소로 이동해야합니다. /db, /schema, /etc 일 수 있습니다.

관련 문제