vCard 형식으로 연락처 레코드를 저장하는 SQL 테이블을 생성하려고합니다. 누구든지 준비된 SQL CREATE 스크립트가 있습니까?SQL에 vCard/vcf 연락처 레코드 저장
답변
스크립트가 없지만 사용할 수있는 mySQL이 있습니다.
스토어 전체 카드와, (아마도) 거대한 텍스트 문자열 데이터베이스 검색을하자, 그리고 다른 부분에서 그들을 처리 : 그 전에 내가 SQL에 저장 vCard를 두 개의 논리적 인 접근 방법이있을 것 같다 언급한다 귀하의 코드 또는 심지어 클라이언트 쪽. 예 : NOT은
vcards
있는 경우(NULL NOT
name_or_letter
VARCHAR (250), NULL NOT
vcard
텍스트, 업데이트 CURRENT_TIMESTAMP에
timestamp
타임 스탬프 NOT NULL 기본 CURRENT_TIMESTAMP,
PRIMARY KEY (username
)
) 엔진을 테이블 만들기 = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_bin;
많은 항목이있는 경우 검색 속도가 느려지 긴하지만 (데이터로 무엇을 하느냐에 따라) 쉽게 구현할 수 있습니다. 이것이 좋은 방법이라면 올바르게 작동 할 것입니다 (어떤 경우에는 이 아닙니다.). 그런 다음 공유하는 아름다운 모듈을 사용하여 vCard 클라이언트 측 또는 서버 측을 처리 할 수 있습니다 (또는 다른 사람이 당신과 함께 공유.)
나는 vCard를 진화를 봤어 내가 세 개의 테이블을 사용할 수 있도록 미래에/어떤/한 번에 몇 가지 변화 이있을 것이라는 것을을 알고있다.
첫 번째 카드입니다 (이 기능은 대개 내 기존 테이블로 다시 연결됩니다. 필요없는 경우 자름 버전이 될 수 있음). 두 번째는 카드 정의입니다 (vCard에서 프로필이라고도 함). 마지막 카드의 모든 실제 데이터입니다.
나는 DBIx :: Class를 허용했기 때문에 (예를 들어 나는 그 중 하나이다.) 모든 데이터베이스 작업을 수행한다. (세 테이블) 나를 위해 잘 작동하는 것 같다. (물론 분명히 유형은 더 밀접하게 을 rfc2426에 맞게하지만, 대부분의 경우 데이터의 각 부분은 텍스트 문자열입니다.)
내가 사람의 주소를 정상화하지 않는 이유입니다 내가 이미 주소를 가지고 내 데이터베이스에있는이 테이블은 비 사용자 연락처 세부 정보 용입니다.
CREATE TABLE `vCards` (
`card_id` int(255) unsigned NOT NULL AUTO_INCREMENT,
`card_peid` int(255) DEFAULT NULL COMMENT 'link back to user table',
`card_acid` int(255) DEFAULT NULL COMMENT 'link back to account table',
`card_language` varchar(5) DEFAULT NULL COMMENT 'en en_GB',
`card_encoding` varchar(32) DEFAULT 'UTF-8' COMMENT 'why use anything else?',
`card_created` datetime NOT NULL,
`card_updated` datetime NOT NULL,
PRIMARY KEY (`card_id`))
ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='These are the contact cards';
create table vCard_profile (
vcprofile_id int(255) unsigned auto_increment NOT NULL,
vcprofile_version enum('rfc2426') DEFAULT "rfc2426" COMMENT "defaults to vCard 3.0",
vcprofile_feature char(16) COMMENT "FN to CATEGORIES",
vcprofile_type enum('text','bin') DEFAULT "text" COMMENT "if it is too large for vcd_value then user vcd_bin",
PRIMARY KEY (`vcprofile_id`)
) COMMENT "These are the valid types of card entry";
INSERT INTO vCard_profile VALUES('','rfc2426','FN','text'),('','rfc2426','N','text'),('','rfc2426','NICKNAME','text'),('','rfc2426','PHOTO','bin'),('','rfc2426','BDAY','text'),('','rfc2426','ADR','text'),('','rfc2426','LABEL','text'),('','rfc2426','TEL','text'),('','rfc2426','EMAIL','text'),('','rfc2426','MAILER','text'),('','rfc2426','TZ','text'),('','rfc2426','GEO','text'),('','rfc2426','TITLE','text'),('','rfc2426','ROLE','text'),('','rfc2426','LOGO','bin'),('','rfc2426','AGENT','text'),('','rfc2426','ORG','text'),('','rfc2426','CATEGORIES','text'),('','rfc2426','NOTE','text'),('','rfc2426','PRODID','text'),('','rfc2426','REV','text'),('','rfc2426','SORT-STRING','text'),('','rfc2426','SOUND','bin'),('','rfc2426','UID','text'),('','rfc2426','URL','text'),('','rfc2426','VERSION','text'),('','rfc2426','CLASS','text'),('','rfc2426','KEY','bin');
create table vCard_data (
vcd_id int(255) unsigned auto_increment NOT NULL,
vcd_card_id int(255) NOT NULL,
vcd_profile_id int(255) NOT NULL,
vcd_prof_detail varchar(255) COMMENT "work,home,preferred,order for e.g. multiple email addresses",
vcd_value varchar(255),
vcd_bin blob COMMENT "for when varchar(255) is too small",
PRIMARY KEY (`vcd_id`)
) COMMENT "The actual vCard data";
이것은 최상의 SQL은 아니지만 도움이 되길 바랍니다.
[이 다른 질문] (http://stackoverflow.com/questions/38352/address-book-db-schema/11313185#11313185)도 도움이 될 수 있습니다. –