2009-11-11 7 views
2
내가 동적 데이터를 포함하는 테이블을 생성 할

, 그것은 날짜, 부울 또는 예를 들어 텍스트 문서를MySQL의 필드 크기는

의 형태 일 수있다 이 isActive ' meta_valu = "1"

또는

meta_key = "theDate" meta_value = "토 7 월를 23 2시 16분 57초 2,005"

또는

meta_key = "설명" meta_value = "이 설명하고이 텍스트가 갈 수 등등에 난 긴 필드 필요"

이 문제는 meta_value 순서에 있어야 필드의 유형입니다 필드는 동적이며 자신의 길이 내가 분명

희망의 공간을 소비 만 할 것이다 삽입마다 "1"에 대한 너무 많은 DB, ...

답변

0

팽창하지에 당신은 아마 VARCHAR field type를 원한다.

CHAR과 달리 VARCHAR 값은 1 바이트 또는 2 바이트 길이의 접두어와 데이터로 저장됩니다.

+0

그래서 병이 단지 거대한 VARCHAR로 meta_value을 정의하고 단지 사용자 입력 필드의 최대보다 높은 아닌지 확인? – tridat

+0

그곳에 65535 바이트 이상을 쓰지 않는 한, 그럴 수 있습니다. 그렇게하면 @Treby에서 제안한 TEXT (최대 4GB)가 작동하지만 (문제가 발생할 수 있음, http://dev.mysql.com/doc/refman/5.0/en/blob.html 참조) – rjp

+0

VARCHAR 실제로 더 많은 공백을 사용합니다 (하나 또는 두 개의 바이트 접두사). 내용은 행 데이터에 여전히 포함되어 있으므로 (행에 참조가 포함 된 TEXT 유형 필드와 반대 됨) 최대 저장 공간을 사용합니다. –

0

희망이 도움이됩니다 : 당신이 구조화되지 않은 데이터 나 문서를 (예를 들어, 프렌드)를 저장하는 경우

datatype=Text 
1

난 단지 당신이 제안하는 방법과 같은 구조화되지 않은 데이터 모델을 사용합니다.

대체 저장 생각

은 SQL 서버와 비정형 데이터에 대한 더 많은 적합 데이터 스토리지 시스템이 있습니다. 이 중 하나를 기존의 구조화 된 데이터베이스와 결합하는 것이 좋습니다.

SQL 옵션

이 작업을 수행 할 수 없습니다 당신의 SQL DB에 구조화되지 않은 데이터를 저장해야하는 경우, 당신은 당신의 데이터가 얼마나, 몇 가지 옵션이, 데이터 유형이 정말로 유일한 문제가되지 않습니다이 저장되어있다.

  • 데이터를 읽는 응용 프로그램이 복잡한 문자열 조작 기능없이 데이터를 쉽게 구문 분석 할 수 있도록하는 일부 구조.

  • 응용 프로그램에서 데이터 모델을 정의 할 수 있어야 데이터를 읽을 때 얻은 정보를 알 수 있습니다.

다음이 옵션은 솔루션을 제공하기 위해이 두 문제 ...

XML - XML ​​데이터 형식

당신이 저장하는 데이터 재질 - 구글 번역 참고해야합니다.반환해야하고 내용에 대한 복잡한 검색을 수행해야하는 경우 XML이 최선의 방법입니다. 또한 저장된 데이터가 정의 된 구조 (dtd 사용)와 일치하는지 확인할 수 있습니다. 이 기사를 참조하십시오.

http://msdn.microsoft.com/en-us/library/ms189887.aspx

또는 JSON - NVARCHAR (최대) 데이터 형식

당신이 일을 가장 쉬운 것 다음 JSON으로 저장, 자바 스크립트로 웹 페이지에 표시하기 위해이 데이터를 반환하거나 사용해야하는 경우 와. 직접 작업하고 조작 할 수있는 객체 모델에 쉽게로드 할 수 있습니다. 단점은 데이터에 대한 복잡한 검색이 XPATH에 비해 매우 느릴 것이라는 것입니다 (모든 개체를 반복하고 일치하는 항목을 찾습니다).

다른 언어 또는 이상한 문자의 데이터를 저장하는 경우 nvarchar (유니 코드 버전)를 사용하십시오. 그렇지 않으면 varchar가 가장 효율적입니다.

+0

나는 "완전히 다른 방식으로"하는 것이 도움이된다는 것을 잘 모르겠다."Schemaless"테이블은 유연한 데이터를 저장하는 비교적 일반적인 방법이며 매우 잘 작동 할 수 있습니다 (예 : FriendFeed 참조 : http://bret.appspot.com/entry/how-friendfeed-uses-mysql) – rjp

+1

완전히 의존합니다. 귀하의 상황, friendfeed 매우 구체적인 응용 프로그램이며 그들은 데이터가 구조화되지 않은 방식으로 그것을 사용합니다. 구조화되지 않은 데이터를 저장하는 경우 CouchDB (문서 저장소), BigTable (하나의 큰 테이블!) 또는 파일 시스템이있는 Lucine을 살펴보십시오. 나는 관계형 데이터베이스가이 목적을 위해 필요한 것이 아니라고 말할 것이다. – badbod99

+0

+1 특히 Lucene을 사용하여 플랫 파일 컬렉션을 인덱싱하는 것은 관계형 패러다임에 쉽게 들어 맞지 않는 "스키마가없는"데이터에 대한 매우 훌륭한 솔루션입니다. –

0

임시 테이블이나 라이브 테이블로 사용하고 있습니까?

여기에 제가 아직 보지 못한 아이디어가 있습니다. 그러나 크기 폭발에 대해 주로 걱정할 필요는 없지만 약간의 추가 작업은 신경 쓰지 마시기 바랍니다. 그러나 최선의 방법은 자신의 테이블 (예 : OrderDate)에 필드가있는 메타 키를 만든 다음 설명, 날짜 등을 가질 수 있다고 생각합니다. catchall DB 테이블은 많은 골칫거리를 만들 수 있습니다.

는이 아이디어를 사용하여 메타 테이블을 만듭니다

는 널 (NULL) 일 수 있습니다 MetaKey MetaVarchar (255) MetaText MetaDate

VARCHAR, 텍스트, 날짜를 MetaID.

삽입 할 프로그램이 어떤 셀을 넣을 지 결정하게하고 데이터베이스 호출은 null이 아닌 필드를 보여줍니다. 짧은 항목은 varchar에, 긴 텍스트는 텍스트에, 날짜는 표시 방법을 변경할 수 있도록 사용할 수 있습니다.

0

MySQL에서는 일반적으로 웹 사이트에 사용하는 동적 클래스의 serialize 된 버전을 저장하는 blob 데이터 유형을 사용합니다.

BLOB는 기본적으로 바이너리 데이터이므로 일단 데이터를 직렬화 및 비 직렬화하는 방법을 이해하면 대부분 데이터를 직렬화하고 역 직렬화해야합니다.

많은 양의 데이터는 효율성이 떨어지지 만 전체 구조를 변경하지 않아도됩니다. 여기

는 BLOB 데이터 유형의 더 나은 설명입니다 http://dev.mysql.com/doc/refman/5.0/en/blob.html

관련 문제