다음은 "Ticket [Number]"는 "을 선택하고 추첨 번호"을 의미합니다. Set(a,b,c)
은 Set(c,b,a)
과 같습니다.
I는 다음과 같이하여 할 것이다 : 예를 들어, 사용자가 그것을 선택으로 수가
이다
Purchase
-PersonID // associate Person (one person can have many purchases)
-TicketID // associate Ticket (a purchase is for one "ticket",
// which can be purchased many times)
-DisplayTicketNumber // for Human Display
Ticket
-TicketNumber
, Purchase:M-1:Ticket
DisplayTicketNumber
인 "3,1,2"반면에 TicketNumber
은 작은 값이 먼저 입력되는 정규화 된 티켓 번호입니다. 따라서 최종 양식은 min,..,max
또는 이와 유사합니다. 즉 (임의의 순서로) 동일한 값 세트가 DisplayTicketNumbers
의 숫자가 같은 TicketNumber
있을 것입니다 :
DisplayTicketNumber TicketNumber
1,2,3 1,2,3
2,3,1 1,2,3
3,2,1 1,2,3
3,2,1,4 1,2,3,4 .. and etc
그럼 그렇게 간단한
WHERE TicketNumber = @normalizedTicketNumber
가 매우 빠른 인덱스 일 무슨
TicketNumber
에 인덱스를 넣습니다.
나는 이것이 실질적으로 이고, 정규화 된 디자인은 TicketNumber (추첨 번호와 함께)가 Key를 형성한다고 주장한다.이에 대한 나의 주장은 따라서 다음과 같습니다
TicketNumber 고유 (추첨 당) 티켓을 식별하는 불투명 값입니다. DB 모델 내부에서 "세부 사항을 알 필요가 없습니다". 경우에 따라서는 필요할 수도 있지만 여기에는 필요하지 않을 수 있습니다.
DisplayTicketNumber는 사용자 입력의 이슈입니다. 아직 여러 DisplayTicketNumbers가 동일한 TicketNumber를 나타낼 수 있습니다. 이 는 가능 "복제"를 나타낼 않지만 선택 번호 (a 는 세트보다 더 많은 정보를 갖는다)를 목록를 나타내는 친숙한 표시 값을 이해하는 것이 중요하다. 이 내가 만들 것 같은 경우
- 생성 한 후, 어떤 데이터베이스 불일치가 여기에서 소개되지 수 있도록 트리거와 불변
DisplayTicketNumber
(및 TicketNumber
).
FK를 계산할 수있는 경우 DisplayTicketNumber와 TicketNumber 사이의 제약 조건을 변경하지 않고 적용 할 수 있습니다.
은 (I는 I도 FK하는 TicketId
표시 등, 다른 플즈위한 다른 TicketNumbers을 갖는 같은 다양한 세부 사항을 생략했지만, I는 RaffleId,TicketNumber
이 허용 [비 대리] 키임을 암시 .)
또한, 티켓 테이블 수 제거 될 : 여분의 관련 티켓 정보가없는 경우는 거의 복권 번호 설정은 다음이 허용 비정규 수 있습니다 제거, 그래서 공유 할 것이기 때문이다. 이 경우의 한 가지 이점은 TicketNumber
이 Purchase
테이블로 이동 한 다음계산 열 (아직 색인화되어 있음)으로 바뀌어 Ticket 값을 정규화했다는 것입니다. MySQL이 관계 PK(Ticket.TicketNumber)
사용 후 FK에서 계산 된 열을 이용하여 허용 경우
그리고 - Purchase.TicketNumber
가 계산>FK(Purchase.TicketNumber)
는, 는 티켓 테이블을 제거하지 않고 모델의 무결성을 높이기 위해 사용될 수있다. (그러나 MySQL을 사용하지 않으므로 실행 가능 여부는 말할 수 없습니다.)
해피 코딩.
숫자는 "티켓"의 속성입니다. 어떤 경우에는 티켓의 일부로 만드십시오. 간단한 CSV 또는 DSV 사용은 SSN 또는 전화 번호처럼 번호 자체가 엔티티 *이므로 자동으로 비정규 화되지 않아야합니다. lotto-numbers가'min, .., max'에 저장되면 간단한 * 정규 표현식과 인덱스 *를 사용할 수 있습니다. '하위 로트 번호'쿼리의 경우 "티켓 번호 N을 포함하는 티켓"은 다른 유스 케이스/문제입니다. –
CSV 방식은 나에게 가장 효율적이고 쉬운 방법 인 것 같습니다. 그것을 얻으십시오. – David
복권을 제공 할 지역 법률에주의하십시오. – David