design-patterns 강좌 - 관계형 데이터베이스 디자인 패턴?




대표적 기초 (9)

다음은 수백 개의 무료 데이터베이스 스키마를 개발 한 신사와 연결되는 링크입니다.

http://www.databaseanswers.org/data_models/

db를 신속하게 빌드해야한다면 아마도 주어진 스키마에서 테이블과 관계의 관점에서 출발점이 될 것입니다. 이 시작 지점을 수정해야 할 필요가 있음을 명심하십시오. 나는 그것이 매우 유용하다는 것을 알았다.

둘째, SQL Server Magazine에는 "Data Modeler"라는 매우 특별한 교육 프로그램이 포함되어 있으며 주어진 시스템에 대한 완벽한 스키마가 포함되어있는 경우가 있습니다.

디자인 패턴은 대개 객체 지향 디자인과 관련이 있습니다.
관계형 데이터베이스 를 만들고 프로그래밍하기위한 디자인 패턴 이 있습니까?
많은 문제가 반드시 재사용 가능한 솔루션을 가져야합니다.

예제에는 테이블 디자인, 저장 프로 시저, 트리거 등의 패턴이 포함됩니다.

그런 패턴의 온라인 저장소가 martinfowler.com 과 비슷합니까?

패턴으로 해결할 수있는 문제의 예 :

  • 계층 적 데이터 저장 (예 : 유형이 단일 테이블과 1 : 1 키 및 차이가있는 여러 테이블 ...)
  • 변수 구조로 데이터 저장 (예 : 일반 열 vs ​​xml 대 구분 된 열 ...)
  • 데이터 비정규 화 (영향 최소화 등)


패턴에 의한 의미에 달려 있습니다. 당신이 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

Martin Fowler의 Signature Series에는 Refactoring Databases 라는 책이 있습니다. 이는 데이터베이스 리팩토링 기술 목록을 제공합니다. 나는 데이터베이스 패턴의 목록을 너무 많이 들었다고 말할 수는 없다.

데이빗 C. 헤이 (David C. Hay)의 데이터 모델 패턴 (Data Model Patterns) 과 메타 데이터 맵 (Metadata Map) 을 먼저 작성하는 것이 좋습니다.이 메타 데이터 맵 은 훨씬 야심적이고 흥미 롭습니다. 머리말만으로 깨달음을 얻었습니다.

Len Silverston의 데이터 모델 리소스 북 시리즈 볼륨 1 에는 보편적으로 적용 가능한 데이터 모델 (직원, 계정, 운송, 구매 등)이 포함되어 있으며, 볼륨 2 에는 산업별 데이터 모델 (회계, 건강 관리 등), 제 3 권 은 데이터 모델 패턴을 제공합니다.

마지막으로,이 책은 UML과 객체 모델링에 대해 표면 상으로 설명되어 있지만 피터 코도 (Peter Coad)의 UML 모델링은 UML 을 사용하여 객체 / 데이터 모델


수년간의 데이터베이스 개발을 마치고 나면 시작하기 전에 대답해야 할 질문이 몇 가지 있습니다.

질문 :

  • 앞으로 다른 DBMS를 사용 하시겠습니까? 그렇다면 현재 DBMS의 특수한 SQL에 사용하지 않습니다. 응용 프로그램에서 논리를 제거하십시오.

사용하지 않음 :

  • 테이블 이름과 열 이름에 공백
  • 테이블 및 열 이름의 비 ASCII 문자
  • 특정 소문자 또는 대문자에 바인딩 그리고 소문자와 대문자 만 다른 두 개의 테이블이나 열을 사용하지 마십시오.
  • "FROM", "BETWEEN", "DELETE"등과 같이 테이블이나 컬럼 이름에 SQL 키워드를 사용하지 않습니다.

recomendations :

  • 유니 코드 지원에 NVARCHAR 또는 이와 동등한 것을 사용하면 코드 페이지에 아무런 문제가 없습니다.
  • 모든 열에 고유 한 이름을 지정하십시오. 이렇게하면 조인 할 때 열을 쉽게 선택할 수 있습니다. 모든 테이블에 "ID"또는 "이름"또는 "설명"열이 있으면 매우 어렵습니다. XyzID와 AbcID를 사용하십시오.
  • 복잡한 SQL 표현식에는 자원 번들 또는 같음을 사용하십시오. 다른 DBMS로 전환하는 것이 더 쉽습니다.
  • 어떤 데이터 유형에도 강하게 캐스트하지 않습니다. 또 다른 DBMS는이 데이터 유형을 가질 수 없습니다. 예를 들어 오라클 DAes는 SMALLINT 번호가 없습니다.

나는 이것이 좋은 출발점이되기를 바랍니다.


AskTom 은 아마도 Oracle DB에 대한 모범 사례에 대한 가장 유용한 단일 리소스입니다. (일반적으로 특정 주제에 대한 Google 검색어의 첫 단어로 "asktom"을 입력하십시오.)

관계형 데이터베이스를 이용한 디자인 패턴을 말하는 것이 실제로 적절하지 않다고 생각합니다. 관계형 데이터베이스는 이미 문제에 "디자인 패턴"을 적용하고 있습니다 (문제는 "무결성을 유지하면서 데이터를 표현, 저장 및 작업하는 방법"과 디자인은 관계형 모델 임). Navigational 및 Hierarchical 모델은 다른 승인 (일반적으로 쓸데없는 것으로 간주 됨)이 있습니다.

그렇다면 "데이터웨어 하우징"을 데이터베이스 디자인에서 다소 분리 된 "패턴"또는 접근 방식으로 간주 할 수 있습니다. 특히 스타 스키마 에 대해 읽는 것이 좋습니다.


Joe Celko의 책은 이런 종류의 것들, 특히 "Smarties for SQL"에 탁월합니다. 그는 공통적 인 문제에 대한 혁신적인 솔루션을 보유하고 있으며 대부분은 재사용 가능한 디자인 패턴입니다.

http://www.celko.com/books.htm


개체를 힙에 할당하려면 고유 한 포인터를 사용하지 않는 것이 좋습니다. 우리는 유일한 포인터를 사용하고 있기 때문에 메모리도 할당 해제됩니다.

class S
{
    public:
        static S& getInstance()
        {
            if( m_s.get() == 0 )
            {
              m_s.reset( new S() );
            }
            return *m_s;
        }

    private:
        static std::unique_ptr<S> m_s;

        S();
        S(S const&);            // Don't Implement
        void operator=(S const&); // Don't implement
};

std::unique_ptr<S> S::m_s(0);






design-patterns database-design rdbms