관계형 데이터베이스 디자인 패턴?
디자인 패턴은 일반적으로 객체 지향 디자인과 관련이 있습니다.
이 있습니까 디자인 패턴 생성 및 프로그래밍하기위한 관계형 데이터베이스는 ?
많은 문제에는 반드시 재사용 가능한 솔루션이 있어야합니다.
예는 테이블 디자인, 저장 프로 시저, 트리거 등의 패턴을 포함합니다.
martinfowler.com 과 유사한 패턴의 온라인 저장소가 있습니까?
패턴으로 해결할 수있는 문제의 예 :
- 계층 적 데이터 저장 (예 : 유형이있는 단일 테이블과 1 : 1 키가있는 여러 테이블 및 차이점 ...)
- 가변 구조로 데이터 저장 (예 : 일반 열 대 XML 대 구분 열 ...)
- 데이터의 비정규 화 (영향을 최소화하면서 수행하는 방법 등)
Martin Fowler의 Signature Series에는 Refactoring Databases 라는 책이 있습니다 . 데이터베이스 리팩토링 기술 목록이 제공됩니다. 데이터베이스 패턴 목록을 너무 많이 들었다고 말할 수는 없습니다.
또한 David C. Hay의 데이터 모델 패턴 과 후속 메타 데이터 맵 을 적극 권장 합니다. 서문만으로도 깨달았습니다.
또한 사전 통조림 데이터베이스 모델을 찾기에 좋은 곳은 Len Silverston의 Data Model Resource Book Series Volume 1 에 보편적으로 적용 가능한 데이터 모델 (직원, 계정, 배송, 구매 등)이 포함되어 있고 Volume 2 에는 산업별 데이터 모델 (회계, 헬스 케어 등), Volume 3 은 데이터 모델 패턴을 제공합니다.
마지막으로이 책은 UML 및 Object Modelling에 대해 다루고 있지만 Peter Coad의 UML을 사용한 모델링은 개체 / 데이터 모델의 4 가지 핵심 아키 타입이 있다는 전제에서 시작하여 "아키 타입"중심의 엔티티 모델링 프로세스를 제공합니다.
다음은 수백 개의 무료 데이터베이스 스키마를 개발 한 신사에 대한 링크입니다.
http://www.databaseanswers.org/data_models/
아마도 DB를 빠르게 빌드 해야하는 경우 주어진 스키마의 테이블 및 관계 측면에서 시작점을 제공합니다. 이 시작점을 수정해야 할 수도 있습니다. 나는 그것이 매우 유용하다는 것을 알았습니다.
두 번째로 SQL Server Magazine에는 "데이터 모델러"라는 열이 있습니다.이 열은 매우 교육적이며 종종 특정 시스템에 대한 완전한 스키마를 포함합니다.
디자인 패턴은 사소하게 재사용 가능한 솔루션이 아닙니다.
디자인 패턴은 정의에 따라 재사용 할 수 있습니다. 그들은있는 거 패턴 당신은 다른 좋은 솔루션을 감지합니다.
패턴은 사소하게 재사용 할 수 없습니다. 그러나 패턴에 따라 다운 디자인을 구현할 수 있습니다.
관계형 디자인 패턴에는 다음이 포함됩니다.
외래 키를 사용한 일대 다 관계 (마스터-세부 사항, 부모-자식) 관계
브릿지 테이블과의 다 대다 관계.
선택적인 일대일 관계는 FK 열에서 NULL로 관리됩니다.
스타 스키마 : 차원 및 사실, OLAP 디자인.
완전히 정규화 된 OLTP 디자인.
차원의 여러 색인화 된 검색 열
하나 이상의 응용 프로그램에서 사용하는 PK, 설명 및 코드 값이 포함 된 "조회 테이블" 왜 코드가 있습니까? 모르겠지만 코드를 사용해야 할 때 코드를 관리 할 수 있습니다.
유니 테이블. [어떤 사람들은 이것을 반 패턴이라고 부릅니다. 패턴이며 때로는 나쁘고 때로는 좋은 경우도 있습니다.] 이것은 두 번째 및 세 번째 일반 형식을 위반하는 미리 결합 된 많은 항목이있는 테이블입니다.
배열 테이블. 열에 값 배열 또는 시퀀스가있어 첫 번째 정규 형식을 위반하는 테이블입니다.
혼합 사용 데이터베이스. 데이터베이스는 트랜잭션 처리를 위해 표준화되었지만보고 및 분석을위한 추가 인덱스가 많이 있습니다. 반 패턴입니다. 이러지 마십시오. 어쨌든 사람들은 그렇게하기 때문에 여전히 패턴입니다.
데이터베이스를 디자인하는 대부분의 사람들은 쉽게 다스 "여러 가지 중 하나"를 약탈 할 수 있습니다. 이들은 정기적으로 사용하는 디자인 패턴입니다.
여기에는 관리 및 운영 패턴의 사용 및 관리가 포함되지 않습니다.
이 블로그 (데이터베이스 프로그래머)를 확인하십시오 .
그는 몇 가지 데이터베이스 패턴을 설명 합니다 .
Joe Celko의 책은 이런 종류의 내용, 특히 "SQL for Smarties"에 탁월합니다. 그는 일반적인 문제에 대한 혁신적인 솔루션을 가지고 있으며, 대부분 재사용 가능한 디자인 패턴입니다.
http://www.celko.com/books.htm
AskTom 은 Oracle DB의 모범 사례에 대한 가장 유용한 단일 리소스 일 것입니다. (보통 특정 주제에 대한 Google 검색어의 첫 단어로 "asktom"을 입력합니다)
관계형 데이터베이스로 디자인 패턴을 말하는 것이 실제로 적절하다고 생각하지 않습니다. 관계형 데이터베이스는 이미 문제에 "디자인 패턴"을 적용하고 있습니다 (문제는 "무결성을 유지하면서 데이터를 표현, 저장 및 사용하는 방법"및 디자인은 관계형 모델 임). 다른 접근 방식 (일반적으로 사용되지 않는 것으로 간주 됨)은 탐색 및 계층 모델입니다 (그리고 다른 많은 것들도 존재합니다).
그러나 "데이터웨어 하우징"은 데이터베이스 디자인에서 다소 분리 된 "패턴"또는 접근 방식으로 간주 할 수 있습니다. 특히 Star 스키마 에 대해 읽고 싶을 것 입니다.
몇 년 동안 데이터베이스를 개발 한 후에는 시작하기 전에 대답 할 질문이 없다고 말할 수 있습니다.
질문 :
- 나중에 다른 DBMS를 사용 하시겠습니까? 그렇다면 현재 DBMS의 특수 SQL 항목에 사용하지 않습니다. 응용 프로그램에서 논리를 제거하십시오.
사용하지 않습니다 :
- 테이블 이름 및 열 이름의 공백
- 테이블 및 열 이름의 비 ASCII 문자
- 특정 소문자 또는 대문자에 바인딩합니다. 소문자와 대문자 만 다른 2 개의 테이블 또는 열을 사용하지 마십시오.
- "FROM", "BETWEEN", "DELETE"등과 같은 테이블 또는 열 이름에는 SQL 키워드를 사용하지 않습니다.
추천 :
- 유니 코드 지원에 NVARCHAR 또는 이와 동등한 기능을 사용하면 코드 페이지에 문제가 없습니다.
- 모든 열에 고유 한 이름을 지정하십시오. 따라서 조인시 열을 쉽게 선택할 수 있습니다. 모든 테이블에 열 "ID"또는 "이름"또는 "설명"이 있으면 매우 어렵습니다. XyzID 및 AbcID를 사용하십시오.
- 복잡한 SQL 표현식에 자원 번들을 사용하십시오. 다른 DBMS로 쉽게 전환 할 수 있습니다.
- 어떤 데이터 유형에도 열심히 캐스트하지 않습니다. 다른 DBMS는이 데이터 유형을 가질 수 없습니다. 예를 들어 Oracle은 숫자 만 SMALLINT가 없습니다.
이것이 좋은 출발점이되기를 바랍니다.
귀하의 질문은 약간 모호하지만 UPSERT
디자인 패턴으로 간주 될 수 있다고 생각합니다. 구현하지 않는 언어의 경우 MERGE
, 문제를 해결하기위한 대안의 수 (적절한 행이 존재하는 경우를, UPDATE
그렇지 않은 INSERT
) 존재한다.
패턴의 의미에 따라 다릅니다. Person / Company / Transaction / Product 등을 생각하고 있다면 그렇습니다. 이미 사용할 수있는 일반적인 데이터베이스 스키마가 많이 있습니다.
Factory, Singleton을 생각하고 있다면 ... 아니요-DB 프로그래밍에 비해 너무 낮은 수준이기 때문에 필요하지 않습니다.
데이터베이스 객체 이름을 생각하고 있다면 디자인 자체가 아닌 규칙 범주에 속합니다.
BTW, S.Lott, 일대 다 및 다 대다 관계는 "패턴"이 아닙니다. 그것들은 관계형 모델의 기본 구성 요소입니다.
Title: Data Patterns
By: Microsoft Corporation
Publisher: Microsoft Press
Pub. Date: December 21, 2004
Print ISBN-13: 978-0-7356-2200-5
참고 URL : https://stackoverflow.com/questions/145689/relational-database-design-patterns
'Programing' 카테고리의 다른 글
숨김을 다른 컴퓨터로 내보내기 (0) | 2020.03.26 |
---|---|
몽구스의“__v”필드는 무엇입니까 (0) | 2020.03.26 |
node.js에 대한 사용자 인증 라이브러리? (0) | 2020.03.26 |
#pragma marks의 의미는 무엇입니까? (0) | 2020.03.26 |
왜 'x'( 'x')가 'x'== 'x'보다 빠릅니까? (0) | 2020.03.26 |