2010-02-17 9 views
2

나는 자원 봉사 관리 시스템을 구축하고있어 좀 DB 설계 문제에 봉착 : 자원 봉사자 계정에 가입 할 수 있습니다 :데이터베이스 설계 문제 :

과정을 설명하기 위해. 자원 봉사자는 시간을 프로젝트에보고합니다 (각 자원 봉사자는 여러 프로젝트를 가질 수 있습니다). 자원 봉사자들이 자원 봉사자들에게 보상을주기 위해 특정 금액에 가까워지면 자원 봉사 감독자에게 통보됩니다.

예 : 자원 봉사자는 무료 티셔츠를받습니다.

내가 겪고있는 문제는 하나의 보상 프로필이 여러 프로젝트와 관련되어있을뿐만 아니라 하나의 보상 프로필이 "다중 계층"이 될 수있는 방식으로 DB를 디자인하는 방법입니다. 이것에 대한 중요한 점은 보상 구조가 변경되어 하드 코드 될 수 없다는 것입니다.

"멀티 티어"보상 프로필의 의미는 다음과 같습니다. 자원 봉사자는 10 시간 동안 무료 티셔츠를받습니다. 40 시간 자원 봉사를 한 자원 봉사자는 무료로 50 달러 감사 수표를받습니다.

나는 나 자신을 생각해 냈습니다. 하나의 행을 각 보상 프로필과 관련시키는 보상 프로필 테이블이 있어야합니다.

rewardprofile: 
rID(primary key) - int 
description - varchar/char(100) 
details - varchar/file (XML) 

는 제외하고, 단지 주제에있는 동안, DB 필드 항목은 파일 수 있는가? 그래서

rewards: 
rID(primary key) - int 
rpID (references rewardsProfile) - int 
numberOfHrs - int 
rewardDesc - varchar/char(100) 

rewardsprofile: 
rpID(primary key) - int 
description 

각 행이고 다음 그들에게 보상을 결합하는 제 보상 프로파일 테이블 함께 항목으로

OR

한 소정 양 관한 보상 테이블을 가지고 보상 이것은 다음과 유사 할 수 있습니다 :

rewardsprofile: 
rpid | desc 
rp01 | no reward 
rp02 | t-shirt only 
rp03 | t-shirt and check 

rewards 
rid | rpID | hours | desc 
r01 | rp02 | 10 | t-shirt 
r02 | rp03 | 10 | t-shirt 
r03 | rp03 | 40 | check 

이 문제는 새로운 것은 아니지만 google fu는 약하고 ph 이것은 의미있는 방식으로 이것을 소망한다. 내 솔루션 (해킹 및 슬래시)보다 형식화 된 솔루션이 있어야한다고 생각합니다. 누군가가이 문제가 무엇인지 또는 어떤 해결책을 제시 할 수 있다면 그것은 부 풀릴 것입니다. 모든 시간 내 주셔서 감사합니다!

건배, 예레미야 Tantongco

+0

가능한 기존 스키마에 대해 databaseanswers.com을 살펴 보셨습니까 ?? –

답변

0

이것은 내가이 처리 할 방법의 대략적인 구조입니다. 그런 다음 일주일에 한 번 또는 한 달에 한 번 정도 보상을 계산하는 직업을 설정하십시오.

1

예, 데이터베이스 필드는 특정 데이터베이스의 구현에 따라 파일 (형 이진, 문자 대형 오브젝트, 또는 XML)가 될 수 있습니다.

장래에 많은 보상을 받으면 보상 필드 테이블을 유지 관리하는 것이 어려울 것으로 보입니다. 다음과 같은 구조가 고려 될 수 있습니다.

rewards: 
rID(primary key) - int 
numberOfHrs - int 
rewardDesc - varchar/char(100) 

volunteers: 
vID(primary key) - int 
.. any other fields you want here .. 

rewardshistory: 
vID (foreign key references volunteers) 
rID (foreign key references rewards) 

언제든지 보상을 추가하려면 보상 표에 추가하십시오. 오래된 보상은 테이블에 남아 있습니다 ('현재'필드 또는 보상을 할당 할 수 있는지 여부를 추적하는 것이 필요할 수 있습니다). 보상 기록 테이블은 자원 봉사자에게 어떤 보상이 주어 졌는지 추적합니다.

+0

은 본질적으로 외부 참조 테이블입니다. 나를 때려. –

0

예, DB 필드 항목은 파일 일 수 있습니다. 또는 더 정확하게는 파일을 참조하는 파일 스펙이 될 수 있습니다. 그게 진짜 의미있는거야?

다른 데이터를 참조하는 데이터 필드의 주제가 있지만 외래 키에 대해 얼마나 알고 있습니까? 외래 키의 현명한 사용으로 더 잘 수행 할 수없는 파일에 대한 참조로 무엇을 할 수 있습니까?

외래 키 및이 키가 참조하는 키는 데이터 관계형 모델의 기본 개념입니다. 이 모델이 없으면 데이터베이스 설계가 꽤 무작위 적으로 진행될 것입니다. 당신은 아마 약간의 시간 제한 보상을해야합니다

Volunteers 
    volunteerid 
    firstname 
    lastname 

VolunteerAddress 
    volunteerid 
    Street1 
    Street2 
    City 
    State 
    POstalcode 
    Country 
    Addresstype (home, business, etc.) 

VolunteerPhone 
    volunteerid 
    Phone number 
    Phonetype 

VolunteerEmail 
    volunteerid 
    EmailAddress 

Project 
    Projectid 
    projectname 

VolunteerHours 
    volunteerid 
    hoursworked 
    projectid 
    DateWorked 

Rewards 
    Rewardid 
    Rewardtype (Continual, datelimited, etc.) 
    Reward 
    RewardBeginDate 
    RewardEndDate 
     RequiredHours 

Awarded 
    VolunteerID 
    RewardID 
    RewardDate 

내가 날짜 필드를 추가, 그 이유 :

0

아침,

당신은 정말 배치해야합니다 관련의 경우 이미 particualr 상을 receivced 사람들을 제외해야합니다 (매 10 시간을합니까? 일에 대한 새 티셔츠를주고 싶지 않아) 확인 차트의 모든 테이블은 엔터티 관계 다이어그램에서 해당 차트의 비즈니스 규칙을 결정합니다. 각각의 테이블과 모든 테이블 사이에 직접적인 관계가 무엇인지 결정한 후에는 원하는 답변을 얻을 수 있는지 테스트합니다. 이 과정을 데이터베이스 설계라고하며, 아직까지는 그렇게하지 않았지만 내가 본 것을 조금 앞서는 것으로 보입니다.

시장에 나와있는 데이터베이스 디자인에 관한 많은 책이 있습니다. 내가 사용하는 것은 "단순한 필사자를위한 데이터베이스 디자인"입니다. 읽고 이해하는 것은 매우 쉽습니다.

희망이 도움이됩니다.