2013-02-18 3 views
3

완전히 설명 할 수 있거나 방향을 지적하면 크게 감사하겠습니다.SQL 관계형 데이터베이스 디자인

저는 비즈니스를 저장하고 로컬 영역을 수행하는 활동으로 나열하는 DB를 만들려고합니다.

활동 카테고리

  • 활동 하위 카테고리
  • 활동 활동 범주가 될 것

  • : 계층 형태에서, 나는 그들을 저장할 실내, 야외, 예술 .. .etc

  • 하위 카테고리는 다음과 같습니다 : 수족관, 박물관, 공원 ... 기타

  • 활동이 하위 범주의 목록이 될 것입니다
  • : 플로리다 수족관, 영국 박물관은 ..

내가 무엇을 적절한 관계 것, 내 테이블로 위의 세 이름을 사용하는 말? ActivitySubCategory 테이블에서 ActivityCategoryID Pk와의 관계가있는 FK를 만들겠습니까? ActivitySubCategoryID PK와 관련된 Activity 테이블에 FK를 만들 수 있습니까?

+1

필자는 Mereals를위한 데이터베이스 디자인에 대해 좋은 이야기를 들었습니다. 그것은 당신에게 기초를 가르쳐 줄 것입니다. 나머지는 생각하고 있습니다. –

답변

3

많은 관계 (예를 들어 예술에 많은 하위 카테고리가 있지만 영국 Musesum이 예술 및 실내에있을 수 있음)로 끝날 가능성이 높으므로 Join 또는 Link 테이블을 추가해야합니다 액티비티 테이블과 서브 액티비티 테이블의 ids 값만 포함합니다. 한 번 입력 한 각 콤보 만 가져올 수 있도록 두 가지를 모두 PK로 사용해야합니다.

+0

나는 많은 생각을하고 있었고, 두통과 몇 시간 만 구해줬습니다. 귀하의 회신과 시간 내 주셔서 대단히 감사합니다. – KRob

2

각 활동에는 카테고리가 하나뿐입니까? 나의 제안은 Activity 테이블을 생성하고, ParentCategory 컬럼을 가진 Category 테이블을 생성하는 것이다. 이것은 self-referencing join이 될 것이다.

활동에 범주가 하나만있을 수있는 경우 단순한 FK 관계가 모두 필요합니다. 그렇지 않다면 3 번째 테이블이 연관으로 필요합니다.

+0

예, 각 활동에는 하나의 카테고리 만 있습니다. 귀하의 제안과 시간 내 주셔서 감사합니다. – KRob

1

당신이 제안 당신은 외래 키를 만들 수 있습니다

  • FK ActivitySubCategory에서 ActivityCategory에 PK
  • FK를 Activity에서 ActivitySubCategory PK에

그러나, 이것은 만에 당신의 활동을 제한 할 하나의 하위 카테고리. 하나 이상의 하위 카테고리에 활동을 연결해야하는 경우 활동 및 ActivitySubCategories에 대한 외래 키가있는 조회 테이블을 만들어야합니다.

가능한 수준의 범주를 구상하는 경우 자체에 FK가있는 단일 ActivityCategories 테이블을 만들 수 있습니다. 이는 동일한 테이블의 행 사이에 상위/하위 관계가되므로 ActivityCategories.PK를 참조하는 ActivityCategories.ParentKey를 만들려는 경우가 있습니다. 최상위 ActivityCategory에는 NULL ParentKey가 있습니다.

또한 외래 키에 대한 색인을 만드는 것이 좋습니다. 예를 들어 Activity.ActivitySubCategoryKey 및 ActivitySubCategory.ActivityCategoryKey에 인덱스로 만듭니다.이 작업을 수행하지 않으면 활동 범주 또는 하위 범주를 삭제하는 데 오랜 시간이 걸릴 수 있습니다.

+0

첫 번째 게시물을 통해 활동을 하나의 하위 카테고리로 제한하는 것에 대해 방금 말씀 드린 내용을 정확히 알게되었습니다. 나는 당신이 언급 한 ActivityCategories 테이블을 확신 할 수는 없지만 개념적으로 그것은 나에게 장면을 만들어 준다. 나에게 독서를 제공하기 위해 머리 꼭대기에 자원이 있습니까? 윌리엄스 씨께 감사드립니다. – KRob

1

다른 답변으로 확장하고 내가 이런 종류의 문제에 접근하는 방법에 대한 통찰력을 제공하십시오.

데이터베이스 구조는 마지막으로 일이라고 생각합니다. 하루가 끝나면 RDMS는 데이터 저장소입니다. RDMS는 사용하지 않을 때 보관됩니다.

모델링하는 실제 세계 문제에 대해 생각해보십시오. 실세계 객체는 소프트웨어 객체로 모델링 될 것입니다 - 어떤 속성이 필수이고 그 객체를 진화시키는 데 필요한 메소드는 무엇입니까? 이 구조를 명확하게하면 데이터베이스 스키마가 자연스럽게 빠져 나옵니다.

문제의 실제 세계는 2 가지입니다. 활동 및 카테고리. 고유 한 속성을 무시하고 이러한 개체가 상호 작용하는 방식을 고려하십시오.

활동

  • 는 활동 범주에 항상인가?
  • 하나의 카테고리 만?
  • 범주간에 이동할 수 있습니까?
  • 그렇다면 어디 있었는지 알아야합니까?
  • 그리고 언제?
  • 항상 하위 카테고리의 일부입니까, 아니면 카테고리에 직접 첨부 할 수 있습니까?

카테고리

  • 은 오직 계층 구조에서 2 단계가있을 것 또는 하위 하위 범주가 될 수 있을까?
  • 하위 범주는 한 범주에만 포함됩니까?
  • 범주간에 이동할 수 있습니까?
  • 그렇다면 어디 있었는지 알아야합니까?
  • 그리고 언제?
+0

명성을 얻 자마자 나는 이것을 표시하고 있습니다. 이것은 첫 번째 문제입니다. 나는 올바른 질문을하지 않았습니다. 코드 완료 또는 다른 "프로그래머와 같은 생각하는 방법"책으로 돌아가는 것 같습니다. 시간 내 주셔서 감사합니다. – KRob

+0

@KRob 16의 평판을 얻었습니다. 계속 지켜봐주십시오. : ^) –

관련 문제