Я хочу создать таблицу SQL для хранения записей контактов в формате vCard. У кого-нибудь есть готовый скрипт SQL CREATE для этого?Сохранение записей контактов vCard/vcf в SQL
ответ
У меня нет скрипта, но у меня есть mySQL, который вы можете использовать. До этого я должен отметить, что там, кажется, два логических подхода к хранению VCards в SQL:
магазин все карты и пусть поиск в базе данных, (возможно) огромные текстовые строки, и обрабатывать их в другой части ваш код или даже клиентскую сторону. например
CREATE TABLE IF NOT EXISTS
vcards
(name_or_letter
VARCHAR (250) NOT NULL,
vcard
текст NOT NULL,
timestamp
временной метки NOT NULL CURRENT_TIMESTAMP по умолчанию на обновление CURRENT_TIMESTAMP,
PRIMARY KEY (username
)
) ДВИГАТЕЛЬ = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_bin;
Возможно, легко реализовать (в зависимости от того, что вы делаете с данными), хотя ваши поиски будут медленными, если у вас много записей. Если это только для вас, то это может сработать (если это хорошо, то это никогда как раз для вас.) Затем вы можете обрабатывать клиентскую или клиентскую сторону 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) также может помочь вам. –