2012-03-17 61 views

回答

0

我沒有腳本,但我確實有可以使用的mySQL。在此之前,我應該提到的是,似乎有兩個邏輯的方法來儲存電子名片在SQL:

  1. 存儲整個卡,讓數據庫檢索,(可能)巨大的文本字符串,而在另一部分對其進行處理你的代碼甚至客戶端。例如

    CREATE TABLE IF NOT EXISTS vcardsname_or_letter VARCHAR(250)NOT NULL,
    vcard文字NOT NULL,在更新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,但我希望有所幫助。

+0

[This other question](http://stackoverflow.com/questions/38352/address-book-db-schema/11313185#11313185)也可能會幫助你。 – 2012-07-03 14:35:55

相關問題