2010-02-02 1 views
6

이것은 내 가정에 근거합니다 :형식 영사법은 반대인가, 아니면 여전히 영사법인가?

public class Fruit : IBasicFruit, IFruitDetails 
{ 
    // IBasicFruit implementation 
    public string name { get; set; } 
    public string color { get; set; } 

    // IFruitDetails implementation 
    public string scientific_name { get; set; } 
    public bool often_mistaken_for_vegetable { get; set; } 
    public float average_grams { get; set; } 
    public int century_domesticated { get; set; } 
} 

... 그리고 유형의 객체를 만드는 것에서부터 :

public class BasicFruit : IBasicFruit 
{ 
    public string name { get; set; } 
    public string color { get; set; } 
} 

... "투영"으로 알려져 있습니다. 또는 "유형 투영"(투영은 익명 유형에만 적용되지 않습니다).

이제 서버에서 클라이언트 응용 프로그램으로 직렬화 된 BasicFruit을 전송한다고 가정 해 봅시다. 두 가지 문자열에 대해 매우 정교한 팜 논리가 수행 된 다음 ORM이 인식하지 못하는 서버로 다시 전송됩니다. BasicFruit 유형의 Fruit 엔티티 유형 만 지원합니다. 하위 집합에서 수퍼 집합으로 이동하기 때문에 BasicFruit 개체 (BasicFruit에없는 속성을 무시함)를 기반으로 새 Fruit 개체를 만들면 ORM에서이를 유지할 수 있습니다. 은 투영과 반대입니다. 여전히 투영으로 간주됩니까? 아니면 그냥 매핑입니까?

투영법을 매핑 형식으로 간주 할 수 있습니까?

답변

1

관계형 대수 투영은 해당 관계 열의 관계와 부분 집합을 취하여 새 관계를 반환하는 연산입니다. 새로운 관계는 지정된 열만있는 점을 제외하면 입력 관계와 같습니다. 지정된 열에 대한 그 값이 동일하면

projection : Relation -> Column list -> Relation 

때문에 여러 행 프로젝트 동일한 행에 입력 관계보다 출력과 관련하여 적은 수의 행이있을 수있다. 우리는 그 열 이름 출력 관련 열의 서브 세트 입력 관계가 여기

inverse_projection : Relation -> Column list -> Relation 

:

이제 반전 동작을 고려한다. 이제 출력 관계의 열이되도록 Column list이 필요합니다. 이제는 입력 관계에있는 열의 수퍼 세트입니다. 일부 열 값이 지정되지 않은 채 출력 관계에 대한 행을 만들어야하기 때문에 약간 특이합니다. 순수 관계형 대수학 관점에서, 이것은별로 의미가 없습니다. 결국, 이러한 지정되지 않은 열의 데이터는 어디에서 왔습니까? 또한 투영 연산과 달리 입출력 관계는 항상 같은 수의 행을가집니다.

SQL에서는 일부 테이블 열만 지정하여 데이터를 삽입 할 수 있습니다. 지정되지 않은 열은 기본값을 사용합니다.

INSERT INTO fruit (name, color) VALUES 
('apple', 'red'), 
('apple', 'green'), 
('orange', 'orange'); 

다시이 같다 관계 대수에가는 관계의 십자가 제품을 복용 같은 더 ... 관계와

NAME, COLOR 
apple, red 
apple, green 
orange, orange 

...

SCIENTIFIC_NAME, OFTEN_MISTAKEN_FOR_A_VEGETABLE, AVERAGE_GRAMS, CENTURY_DOMESTICATED 
"", false, null, null 

하는 것보다 소위 반전 투영법. 다시 말하지만, 개념적으로는 비슷하지만 실제로 기본값을 사용하는 교차 제품을 사용하고 있습니다.

+0

대단히 명확하게 설명 된 답변! – Jay

관련 문제