2016-11-23 1 views
1

단일 사용자의 데이터를 저장하는 user 테이블이 있다고 가정합니다.단일 항목에 대한 데이터를 저장하는 테이블이 가로 또는 세로로 확장되어야합니까?

처음에는 사용자에 대해 알지 못하므로 표에 아무 것도 없습니다 (이 경우에는 id과 같은 단일 열일 수 있음).

사용자에 대한 세부 정보가 무엇인지 알 수 없으며 세부 정보를 얻는 순서를 알 수 없습니다. 사용자에 대한 세부 정보는 어떤 순서로든 점차적으로 얻을 수 있습니다.

예를 들어, 사용자 이름이있는 경우 테이블에 어떻게 입력해야합니까?

나는 두 가지 옵션

1) 테이블 구조를 변경하고 열라는 이름을 추가하고이 데이터를 저장할 수 있습니다. 모든 새로운 세부 사항에 대해이 과정이 반복됩니다. 따라서 모든 데이터는 한 행에 있습니다.

2) 테이블 구조를 변경하고 keyvalue 열에 추가하십시오. namekey으로 지정하고 사용자 이름을 value으로 저장하십시오. 따라서 사용자에 대한 각 세부 사항에 대해 새 행이 키 값 쌍으로 삽입됩니다.

첫 번째 방법은 테이블을 수평으로 만듭니다. 두 번째로 세로로 커집니다.

좋은 디자인 방법과 쿼리의 용이성을 바탕으로 좋은 것은 무엇입니까?

+0

일반적으로 잘 정의 된 열이있는 올바르게 설계된 테이블이 가장 좋습니다. 키/값 쌍이 유용 할 수도 있지만, 데이터를 입력하기 전에 테이블 구조를 정의하는 것이 가장 좋습니다. –

+0

대답은 (거의 모든 디자인 관련 질문에 대해) 정확한 상황에 달려 있다는 것입니다. 일반적인 지침을 제공하는 것은 꽤 어렵습니다. – Shadow

+0

모든 사람의 첫 번째 반응은 "당연히 사용자가 특성을 알고 있는지"알기 때문에 "사용자"를 예제로 사용하여 정의를 질문하지 않을 수도 있습니다.엔티티별로 다를 수있는 알려지지 않은 속성을 저장해야하는 경우 솔루션을 찾고있는 문제를 설명하려고 할 때 질문이 일반적으로 더 잘 작동한다고 말하십시오. –

답변

2

사용자와 관련된 메타 데이터가 임의로 커질 수 있다고 예상되는 경우 열을 추가하는 것이 최선의 방법이 아닙니다. 따라서 사용자와 관련된 새로운 기능마다 키/값 쌍을 추가하면됩니다. 세 번째 옵션이 있습니다. 사용자 테이블의 단일 열에 키/값 쌍을 포함하는 JSON을 저장하는 것이 많은 이유에서 마음에 들지 않습니다. 현재이 방법을 산발적으로 사용하고 있지만 자바 앱 레이어에서 JSON 조작을 처리합니다. 상대적으로 어렵습니다. 순수한 데이터베이스 관점에서 볼 때 이것은 바람직하지 않습니다.

키/값 쌍을 사용하는 두 번째 옵션은 투표가 잘 될 것이므로 투표 할 것입니다. 이것은 사용자 테이블에 단일 열만 있음을 의미하지는 않습니다. 특정 수의 사용자 속성이 항상있을 것입니다. 사용자 이름, 해시 된 암호 등이 있으며이 열은 처음에 추가 될 수 있습니다.

+1

@ timbiegeleisen 감사합니다. – jophab

1

다른 사람들이 이미 말한 것을 바탕으로 하이브리드 방식을 사용할 수도 있습니다. 미리 정의 된 열 (사용자 이름, 이름, 성, 암호 등)이있는 경우 정의 된 필드가있는 테이블에 해당 열을 넣은 다음 추가 데이터를 위해 두 번째 테이블을 키/값 쌍과 연결할 수 있습니다.

+0

감사합니다. @philipxt – jophab