2010-03-16 2 views
1

사용자는 웹 페이지의 정적 테이블에 특정 유형의 열을 추가 한 다음 정보를 저장할 수 있어야합니다 데이터베이스에 입력됩니다.N 열을 가질 수있는 웹 페이지의 테이블에서 DB에 데이터를 저장하는 좋은 방법이 필요합니다.

나는 현실에서는 거의 5 열을 넘지 않는다고 말했지만 나는 N을 지원하려고한다. 열은 모두 동일한 데이터 유형으로되어있다.

필자가 생각한 첫 번째 생각은 거기에 추가 된 모든 열의 값이있는 XML 열을 사용하는 것이지만 더 나은 솔루션을 제공 한 사람이 있는지 궁금합니다. 제안?

+0

구체적으로이 방법으로 열을 추가해야하는 이유는 무엇입니까? 일반적으로 이것은 매우 빈약 한 실천으로 간주됩니다. 데이터베이스 디자인은 사용자에게 남겨 두어서는 안됩니다. – HLGEM

답변

0

이 데이터를 xml과 같이 하나의 열로 직렬화하면 검색해야하는 경우 문제가 발생합니다.

검색 할 필요가 없다면 xml이 좋을 것입니다.

당신은 부모 - 자식 모델을 사용할 수 있습니다

FixedTable 
PK 
data1 
data2 
... 

VariableTable 
PK - auto generate/identity 
fk - points to FixedTable.PK 
data1 

을 여전히 인덱스 및 검색을 추가 할 수 있습니다. 사용자의 정기 데이터는 FixedTable에 저장되고 사용자가 추가 한 extra columns은 VariableTable에 저장됩니다.

+0

어떤 종류의 문제입니까? 공연? SQL Server 2008의 where 절에서 XML 값을 확인할 수 있다고 생각합니다. –

+0

2008 년 예 : http://stackoverflow.com/questions/966441/xml-query-in-sql-server-2008, 적절한 sql-server-2008 태그로 질문을 편집해야합니다! –

+1

@Abe : @KM은 직렬화 된 문자열 값 VS로 저장된 XML의 차이점에 대해 이야기합니다. XML은 XML 데이터 유형으로 저장됩니다. –

0

vertical table을 사용할 수 있습니다. 점프해야하는 몇 가지 농구가 있지만 성능이 좋지는 않지만 매우 유연합니다. 또한 SQL Server를 사용하는 경우 PIVOT command을 확인하십시오.

0

이 작업을 수행해야하는 경우 나중에 원래 테이블에 조인 할 수있는 별도의 테이블에서 수행하십시오. 필요한 경우 EAV 구조를 사용할 수 있지만 n 열을 추가 할 수있는 유연성은 성능에 매우 큰 영향을줍니다. 나는 많은 경우에 정말로 받아 들일 수없는 성능을 말하는 것이고, 더 많은 기록을 얻을수록 더 나 빠지게됩니다. 다른 선택의 여지가 없다면이 경로를 따라 가지 마십시오.

길을 취하고 col1, col2, col3 (사용자 및/또는 다른 데이터 테이블에 연결하는 데 필요한 다른 열)이라는 5 개의 열이있는 테이블을 추가하고 데이터를 추가하도록합니다 그 열에. 각 사용자가 다른 이름을 지정하려는 경우 열 이름을 알아내는 데 교차 참조 테이블이 필요할 수 있습니다.

xml 필드에 데이터를 넣을 수 있지만 나중에 쿼리 할 방법은 무엇입니까? 당신이 처리 할 방법을 결정하기 전에 그것을 알아 내야 할 필요가 있습니다.

일반적으로이 유연성 수준은 좋지 않습니다. 5 명의 다른 사용자가 서로 쿼리 할 수있는 데이터를 포함하는 다섯 개의 다른 열을 추가하지만 각각 다른 이름을 사용하기 때문에 데이터베이스 대신 엉망이됩니다. 고객이 디자인 한 열을 보유해야하는 경우, 최소한 고객 당 한 명의 관리자가 열을 추가하도록하십시오. 사용자가 가지고있는 것이 좋다고 생각할 때 즉시 수정하는 것은 아닙니다.

관련 문제