문제

좋아요,그래서 내가 만드는 테이블 지금은"상품".

지금은,박스에 따라 항목의 사용에 대한/상태의 항목,수도 있 관련된"운송 상자"또는"반품"상자입니다.

이란 항목에 결함이 있는 경우:그것은,플래그 것이 상자에서 설정 항목의 행(IsDefective),상자 품목하는 것을 방지합니다."반품"자(다른 항목과를 반환하는 공급업체).그렇지 않으면,이란 항목에 결국에 넣어"송"박스(다른 품목을 발송될).(참고로 배송하고 반환 상자가 자신의 테이블:거기에 하나 일반 테이블에 대한 모든 상자...하지만 어쩌면 내가 하는 것을 고려해야 한다는 가능한 경우로서 세 번째 가능성?)

아마도 내가 생각하지 않을 명확히 오늘날,하지만 난 질문을 하기 시작했 무엇을 해야에서 이동합니다.

내 창자가 나에게 말하는 내가 있어야 하는 별도의 분야에 대한 각각의 가능한 관계,심지어 하나뿐인 경우의 관계에서 발생할 수 있습이 주어진 시간으로는 스키마에 대한 상자 항목은 다음과 같은 모양입니다:

BoxItemID 설명 IsDefective ShippingBoxID ReturnBoxID 등...

이들의 관계는 명확하지만,그것은 보인다 낭비(기 때문에만 하나의 관계에 사용되는 것에서 어떤 시간).그래서 다음을 할 수 있다고 생각했어요 다만 하나 분야에 대한 BoxID,그리고 결정하는 BoxID 그것을 참조(하거나 발송 또는 반환 상자 ID)를 기반으로 IsDefective 필드:

BoxItemID 설명 IsDefective BoxID 등...

이것은 덜 낭비하지만,바르게 앉지 않으 나와 함께.의 관계는 명백하지 않.

그래서,저는 그것을 당신,데이터베이스 전문가의 유래.당신은 무엇이라면 이 상황에서 어떻게 할까?

편집:해주신 모든 분들께 감사드립니다.그것은 나에게 많은 생각합니다.하나,내가 사용하는 ORM 다음으로 프로젝트를 시작하는 이렇습니다.=)두 가지,때문에 나는 지금,나는 물이 네 개의 바이트를 사용하여 두 개의 필드가 있습니다.

주셔서 감사합니다 모두가 다시!

도움이 되었습니까?

해결책

나는 정신병 독 mattlant.

가 다형선(을 파악하는 테이블의 외국인 핵심인에 따라 다른 내용의 분야)이 될 것입니다.코딩에 대한 제약 조건을 어쩌면 힘들(나는 확실하지 않은 대부분의 데이터베이스를 지원하는 기본적으로,나는 당신을 생각해야 할 것을 사용하여 트리거).

지 항목이 이제까지 간에 이동이블?고집으로 두 개의 테이블과 동일한 정의는 어디로 하나를 반환하고 다른 하나는 배송할 수 있는 가장 쉬운 경로입니다.하려는 경우스틱으로 정의 첫 번째 제안(으로 두 개의 필드)는 완벽하게 적당합니다.

"조 최적화는 모든 악의 뿌리"모든 것을.는 동안 그것은 보인다면 소비가 기억하신 후 보관하십시오.이후 그들은 Id 와 그들은 아마 정수,아니면 4 바이트입니다.을 낭비하는 네 개의 바이트를 기록당은 기본적으로 아무것도 아니다.사실로 인해 패딩은 일에도 주소 또는 다른 것이 될 수 있습니다"무료"를 넣어하는 추가 필드에있다.그것은 모두에 따라 달라집 DB 디자인이다.

지 않는 한 당신은 매우 좋은 이유로 이동 다형 경로(같은 당신이에서는 임베디드 시스템을 적은 메모리하거나 당신에 복제 일부는 정말로 느린 9600bps 링크)그것은 아마도 가치가 있지 않을 것 두통할 수 있는 결과입니다.를 작성하는 것은 모든 사람들을 특별한 경우로 귀하의 질을 얻을 수 있습니다.

간단한 예제:하 가입 두 테이블에 가입 할 경우에 기초하는 경우 isDefective 플래그 설정을 것입니다.할 수 있는 한 개만 사용하는 두 개의 열을 혼자는 아마도 충분한 번거로움을 저장할 수 있습니다 적어도니다.

다른 팁

나는 것을 고려하는 것이 하나의 테이블과 상자 유형을 열 수 있는 상자의 테이블.이를 단순화하는 관계를 확인하고 쉽게도에 대한 쿼리를 상자 유형입니다.그래서 이란 항목만 있는 한 외국인 핵심 boxId.

나는 무엇을 사용 최대 절전 모드 전화 테이블당 서브 클래스, 다,그래서 내 DB 것이 바람에 3 위한 테이블:상자 Box, ShippingBox, 고 ReturnBox.FK 에 BoxItem 를 가리키는 것입 Box.

무슨 얘기가 다형 관계가 있습니다.하나의 ID 를 참조할 수 있는 다른 여러 테이블이 있습니다.여러 가지가 있는 프레임워크 지원 이것은,그러나,그것입니다(잠재적으로)에 대한 나쁜 무결성 데이터베이스(할 수 있는 전혀 다른 논의할지 여부를 데이터베이거나 응용 프로그램을 유지해야한 참조 무결성).

이것에 대해 무엇?

BoxItem:
BoxItemID, Description, IsDefective

Box:
BoxID, Description

BoxItemMap:
BoxID, BoxItemID, BoxItemType

다음할 수 있습 BoxItemType 는 열거,또는 정수를 정의한 상수로서의 응용 프로그램으로"Return"또는"선박대로"유형의 상자입니다.

에 대해 동의 다형적 토론을 위하고 있지만,잠재력을 사용할 수로,그것은 여전히 가능한 솔루션입니다.

기본적으로 당신은 기본 테이블이라는 상자입니다.당신은 두 가지 기타 테이블,배송 상자 및 반환 상자입니다.그 두 가지를 추가하는 추가 필드가는 그들에게 특별하다.그들은 관련 상자 1:1fk.Boz 기본 테이블은 일반적인 분야의 상자 형식입니다.

당신이 관련 BoxItem 상자이다.방법 당신은 당신이 적당한 상자 타입에 의해 하고 있는 쿼리를 결합한 아동자 루트 상자에 기반한 핵심입니다.에 있는 레코드에 모두 기본 상자과 아동자의 유형이 있습니다.

당신은 조심해야 다음과 같이 언급할 때 만들기 상자 유형는 제대로 수행됩니다.하지만 그게 무엇을 테스트하는 것입니다.코드 추가만 필요 ot 작성 한다.로 사용하거나 ORM.

거의 모든 ORM 의 지원이 전략입니다.

나는 단지 하나의 BoxItems 테이블 IsDefective,ShippingBoxID,운송 상자 관련 필드 ReturnBoxID 및 반환 상자 관련 필드가 있습니다.어떤 분야는 항상 NULL 이 될 수 있습니다.

이것은 매우 간단하고 자명한 디자인에는 다음이 개발자는 혼동하지 않을 수 있습니다.이론적 이 디자인은 비효율적이기 때문에 보 빈 필드를 위해 각각의 행이 있습니다.실제 데이터베이스를 갖는 경향이있는 데 필요한 최소의 저장소 크기 각 행에 대해 어쨌든,그래서(지 않는 한의 수는 분야가 거대)이 디자인은 가능한 한 효율적으로 어쨌든,그리고 훨씬 쉽습니다.

나는 아마와 함께 이동:

BoxTable:
box_id, box_descrip, box_status_id ...
     1, Lovely Box, 1
     2, Borked box, 2
     3, Ugly Box, 3
     4, Flammable Box, 4

       BoxStatus:
       box_status_id, box_status_name, box_type_id, ....
                   1,Shippable, 1
                   2,Return, 2
                   3,Ugly, 2
                   4,Dangerous,3

                BoxType:
                box_type_id, box_type_name, ...
                          1, Shipping box, ...
                          2, Return box, ....
                          3, Hazmat box, ...

는 방법으로는 상자의 상태를 정의 상자 형식,그리고 유연성이 필요한 경우으로 확장하기 위해 몇 가지 더 상태 레벨 또는 상자 유형니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top