2013-10-29 2 views
0

누군가 이전에 비슷한 질문을했지만 답변을받지 못했습니다. How to store value objects in a relational database?관계형 데이터베이스에 객체를 저장하는 방법은 무엇입니까?

다음은 제 질문에 대한 예입니다. '사용자'테이블이 있고 각 사용자가 위치를 저장해야한다고 가정 해 보겠습니다. 그들의 위치는 기본적으로 x, y, z의 3 좌표입니다.

하지만 어떻게해야하는지 잘 모르겠습니다. 나는 'x, y, z'라는 이름의 '사용자'행에 3 개의 정수 필드를 추가 할 수 있습니다.

또는 사용자 행에 '위치'문자열 필드를 추가 한 다음 사용자 위치를 가져 오거나 저장할 때마다 간단히 직렬화 및 비 직렬화 할 수 있습니다.

또는 '사용자'위치 데이터베이스의 외래 키로 사용되는 auto-inc 기본 키 ID가있는 '위치'테이블을 만들 수 있습니다.이 테이블에는 'id', ' 'x', 'y', 'z'.

그래서 어떤 것이 가장 좋습니까? 아마도 내가보기에는 좋지 않은 대답이 있을지 모릅니다. 감사.

+0

"최고의"절대로 거의 없습니다. –

+0

_ "...하지만 대답하지 못했습니다"_ : 글쎄, [지금은] (http://stackoverflow.com/questions/15650898/how-to-store-value-objects-in-a-relational -database/19665483 # 19665483)! ;) – geomagas

답변

1

일반적으로 모든 시나리오가 다른 경우가 있고 때로는 미묘한 방식으로 "최상의"것은 아닙니다.

이 가능한 간단한 일을 수행하고 필요한 경우에만 복잡성을 추가 : 일반적으로 뭔가를 디자인 할 때 전체 "모범 사례"를 찾고 있다면

그러나,이쪽으로 기울어 것입니다.

이 목적을 위해 Users 테이블에있는 3 개의 정수 열이 의미가 있으며 매우 간단하다고 생각합니다. 당신은 문자열로 데이터를 직렬화해야합니까? 결국 데이터 자체는 문자열이 아닙니다. 숫자 값 집합입니다. 그건 다른 일을 불필요하게 어렵게 만들 수도 있겠지, 안 그래? 데이터 은 자체 식별자가있는 별도의 테이블에 있어야이 필요합니까? 결국, 실제로는 엔티티 자체가 아니며 User을 설명하는 데이터 요소 일뿐입니다.

더 복잡한 작업을 수행해야하는 강력한 이유가없는 한 간단하게 유지하십시오.

0

내 의견으로는 정규화가 더 좋을 것입니다. 즉 등 작업 부하 (당신이이 테이블에 대해 실행됩니다 쿼리), 데이터 자체에 의존하기 물론

예를 들어, 당신은 것입니다 ... 더 좋은 방법이 없다 x, y 및 za 로트를 읽고 업데이트하는 경우, 모든 행에 대해 문자열을 구문 분석해야하는 경우 차이가 발생할 수 있습니다. 예를 들어 별도의 위치 컬렉션이 필요할 것입니다. 다른 테이블이 도움이 될 것입니다.

0

사용자가 x, y, z보다 많은 데이터를 저장해야한다는 점을 고려하여 3 번째 옵션을 사용합니다. 데이터베이스의

  • 가독성 :

    내 이유 ... 난 그 테이블의 이름을 변경하는 것하지 않으면 ¿ 무엇은 사용자에 대한 x 및 y의 Z를 나타냅니다? 위치에 대해 x y z를 나타내는 것은 무엇입니까?마지막 하나는 100 사용자가 동일한 위치 A를에있는 경우, 당신은 단지 해당 위치 A에 그 100 명의 사용자를 가리 키도록해야

  • 보다 직관적 인 소리를 해당 위치 (A)에 더 많은 데이터를 추가하려면

  • (주소, 위도, 경도 등 ...) 단지 열을 추가하는 표 위치를 편집하고 (100 대신) 한 행만 편집하면됩니다.

  • 다른 목적으로 위치에 저장된 모든 데이터를 사용할 수 있습니다. 당신이 최근에 또한 건물, 차량 등 같은 다른 인스턴스를 저장할 필요가 있다면 ... 당신은 준비의 모든 구조를 가지고 심지어 현재의 데이터는 내가 훨씬 더 읽을 수있는 확장 가능하고보다 유연한 마지막 하나를 찾을

Brieffing 사용할 수있다 다른 두 사람. 하지만 프로젝트의 범위에 따라 달라집니다.