고객 데이터가 포함 된 램프 기반 소프트웨어를 중심으로 작업하고 있습니다. 고객 데이터가있는 테이블은 가져 오기 인터페이스를 통해 다양한 소스에서 제공됩니다. 문제는 테이블에 고정 스키마가 없어야한다는 것입니다. 행 X에 5 개의 열이 있고 행 Y에 20 개의 열이있을 수 있습니다.MySQL에서 스키마가없는 (문서 지향) 테이블 만들기
우리의 이전 솔루션은 다음과 같이했다 :
(255) 우리는 테이블에 저장 될 데이터의 종류를 알지 못했다, 그래서 우리는 VARCHAR를 작성했기 때문에이 표는 큰 오버 헤드를 가지고CREATE TABLE `customers` (
`id` int (10) unsigned NOT NULL auto_increment,
`branch_id` int (10) unsigned NOT NULL,
`type` tinyint (1) DEFAULT NULL,
`visible` tinyint (1) DEFAULT NULL,
`status` tinyint (1) NOT NULL DEFAULT '1',
`2` varchar (255) NOT NULL,
`3` varchar (255) NOT NULL,
`4` varchar (255) NOT NULL,
`5` varchar (255) NOT NULL,
`6` varchar (255) NOT NULL,
`7` varchar (255) NOT NULL,
`8` varchar (255) NOT NULL,
`9` varchar (255) NOT NULL,
`10` varchar (255) NOT NULL,
`11` varchar (255) NOT NULL,
`12` varchar (255) NOT NULL,
`13` varchar (255) NOT NULL,
`14` varchar (255) NOT NULL,
`15` varchar (255) NOT NULL,
`17` varchar (255) NOT NULL,
PRIMARY KEY (`id`),
KEY `branch_id` (`branch_id`)
FULLTEXT KEY `search` (`2`, `3`, `4`, `5`, `6`, `7`, `8`, `9`, `10`, `11`, `12`, `13`, `14`, `15`)
) ENGINE = MyISAM DEFAULT CHARSET = utf8;
열. 여기에 열 이름을 저장 한 두 번째 테이블은 없습니다. 당신이 볼 수 있듯이
id col name
====================
1 2 firstname
2 8 zip
, 우리는 기본 열이 포함 된 테이블을 시작했습니다 :이 표는 다음과 같이 보인다. 그런 다음 새 열이 추가되거나 열이 더 이상 필요하지 않으면 가져 오기 또는 업데이트가 완료 될 때마다 확인했습니다. 이 경우 해당 열을 삭제하거나 새로운 열을 추가했습니다. 또한 추가 테이블을 항상 조정해야했습니다.
이 솔루션은 속도, 단순성 및 논리면에서 타협점이었습니다. 가장 확실한 해결책은 MongoDB와 같은 문서 지향 DBMS를 사용하는 것입니다.
불행히도 우리는 MySQL과 독점적으로 일해야합니다. MySQL에 스키마가없는 테이블을 생성하는 솔루션이 있습니까? 다른 유용한 방법이 있습니까?
왜 한 열만 사용하고 XML에 모든 것을 저장하지 않으시겠습니까? http://dev.mysql.com/doc/refman/5.1/en/xml-functions.html –
우리는 속성에 조인을 수행 할 수 있어야합니다. 지금까지 내가 아는 바로는 XML 데이터에서는 불가능합니다. – disputable