Seeking Schema for vCard Data Elements

前端 未结 1 1159
执念已碎
执念已碎 2021-02-06 17:10

I need a relational database schema to store vCard ver 3 data elements.

Rather than reading the RFC and designing one from scratch, I\'m looking to see if someone who ha

1条回答
  •  野性不改
    2021-02-06 17:46

    VCard 3.0 DB Specs (http://i.stack.imgur.com/61qGU.png)

    This is my DB schema for a VCard 3.0. This works quite well with CardMe library, each type is mapped to a database table and the many-to-many / one-to-many relationships are enforced through foreign keys.

    CREATE DATABASE ERP;
    CREATE TABLE ERP.CONTACT_MAIL_ADDRESS
    (
        MAIL_ADDRESS_ID CHAR(36) NOT NULL,
        POBOX VARCHAR(30),
        EXTENDED_ADDRESS VARCHAR(255),
        STREET VARCHAR(255) NOT NULL,
        LOCALITY VARCHAR(50),
        REGION VARCHAR(50),
        POSTAL_CODE VARCHAR(30),
        COUNTRY VARCHAR(50),
        PRIMARY KEY(MAIL_ADDRESS_ID)
    );
    
    CREATE TABLE ERP.CONTACT_PHONE_NUMBER
    (
        PHONE_NUMBER_ID CHAR(36) NOT NULL,
        LOCAL_NUMBER VARCHAR(255) NOT NULL,         -- Free form telephone number
        PRIMARY KEY(PHONE_NUMBER_ID)
    );
    
    CREATE TABLE ERP.CONTACT_EMAIL
    (
        EMAIL_ID CHAR(36) NOT NULL,
        EMAIL_ADDRESS VARCHAR(255) NOT NULL,
        PRIMARY KEY(EMAIL_ID)
    );
    
    CREATE TABLE ERP.CONTACT_AGENT
    (
        AGENT_ID CHAR(36) NOT NULL,
        URI VARCHAR(255) NOT NULL,
        PRIMARY KEY(AGENT_ID)
    );
    
    CREATE TABLE ERP.CONTACT_CATEGORIES
    (
        CATEGORY_ID CHAR(36) NOT NULL,
        CATEGORY_NAME VARCHAR(255) NOT NULL,
        PRIMARY KEY(CATEGORY_ID)
    );
    
    CREATE TABLE ERP.CONTACT_NOTE
    (
        NOTE_ID CHAR(36) NOT NULL,
        NOTE TEXT NOT NULL,
        PRIMARY KEY(NOTE_ID)
    );
    
    CREATE TABLE ERP.CONTACT_XTENDED
    (
        XTENDED_ID CHAR(36) NOT NULL,
        XNAME VARCHAR(255) NOT NULL,
        XVALUE VARCHAR(255) NOT NULL,
        PRIMARY KEY(XTENDED_ID)
    );
    
    CREATE TABLE ERP.CONTACT_KEYS
    (
        KEY_ID CHAR(36) NOT NULL,
        KEY_DATA TEXT NOT NULL,
        PRIMARY KEY(KEY_ID)
    );
    
    CREATE TABLE ERP.CONTACT_DATA
    (
        CONTACT_DATA_ID CHAR(36) NOT NULL,
        DATA_NAME VARCHAR(10) NOT NULL,             -- [LOGO,PHOTO,SOUND]
        URL VARCHAR(255),
        INLINE CHAR(1),
        DATA MEDIUMBLOB,
        PRIMARY KEY(CONTACT_DATA_ID)
    );
    
    CREATE TABLE ERP.CONTACT_TYPES
    (
        TYPE_ID CHAR(36) NOT NULL,
        TYPE_NAME VARCHAR(20) NOT NULL,
        PRIMARY KEY(TYPE_ID)
    );
    
    CREATE TABLE ERP.CONTACT_ENCODING_TYPES
    (
        ENCODING_TYPE_ID CHAR(36) NOT NULL,
        TYPE_NAME VARCHAR(20) NOT NULL,
        PRIMARY KEY(ENCODING_TYPE_ID)
    );
    
    CREATE TABLE ERP.CONTACT
    (
        CONTACT_ID CHAR(36) NOT NULL,
        FN VARCHAR(255) NOT NULL,
        N VARCHAR(255) NOT NULL,
        NICKNAME VARCHAR(255),
        BDAY TIMESTAMP,
        MAILER VARCHAR(50),
        TZ INTEGER,                 -- Time zone offset in hours
        GEO_LAT DOUBLE,             -- Latitude
        GEO_LONG DOUBLE,            -- Longitude
        TITLE VARCHAR(50),
        ROLE VARCHAR(50),
        PROD_ID VARCHAR(255),
        REV VARCHAR(50),
        SORT_STRING VARCHAR(50),
        UID VARCHAR(255),
        URL VARCHAR(255),
        VERSION VARCHAR(10),
        CLASS VARCHAR(50),
        PRIMARY KEY(CONTACT_ID)
    );
    
    CREATE TABLE ERP.CONTACT_REL_MAIL_ADDRESS
    (
        CONTACT_ID CHAR(36) NOT NULL,
        MAIL_ADDRESS_ID CHAR(36) NOT NULL,
        FOREIGN KEY(CONTACT_ID) REFERENCES ERP.CONTACT(CONTACT_ID),
        FOREIGN KEY(MAIL_ADDRESS_ID) REFERENCES ERP.CONTACT_MAIL_ADDRESS(MAIL_ADDRESS_ID),
        PRIMARY KEY(CONTACT_ID,MAIL_ADDRESS_ID)
    );
    
    CREATE TABLE ERP.CONTACT_REL_PHONE_NUMBER
    (
        CONTACT_ID CHAR(36) NOT NULL,
        PHONE_NUMBER_ID CHAR(36) NOT NULL,
        FOREIGN KEY(CONTACT_ID) REFERENCES ERP.CONTACT(CONTACT_ID),
        FOREIGN KEY(PHONE_NUMBER_ID) REFERENCES ERP.CONTACT_PHONE_NUMBER(PHONE_NUMBER_ID),
        PRIMARY KEY(CONTACT_ID,PHONE_NUMBER_ID)
    );
    
    CREATE TABLE ERP.CONTACT_REL_EMAIL
    (
        CONTACT_ID CHAR(36) NOT NULL,
        EMAIL_ID CHAR(36) NOT NULL,
        FOREIGN KEY(CONTACT_ID) REFERENCES ERP.CONTACT(CONTACT_ID),
        FOREIGN KEY(EMAIL_ID) REFERENCES ERP.CONTACT_EMAIL(EMAIL_ID),
        PRIMARY KEY(CONTACT_ID,EMAIL_ID)
    );
    
    CREATE TABLE ERP.CONTACT_REL_CATEGORIES
    (
        CONTACT_ID CHAR(36) NOT NULL,
        CATEGORY_ID CHAR(36) NOT NULL,
        FOREIGN KEY(CONTACT_ID) REFERENCES ERP.CONTACT(CONTACT_ID),
        FOREIGN KEY(CATEGORY_ID) REFERENCES ERP.CONTACT_CATEGORIES(CATEGORY_ID),
        PRIMARY KEY(CONTACT_ID,CATEGORY_ID)
    );
    
    CREATE TABLE ERP.CONTACT_REL_NOTE
    (
        CONTACT_ID CHAR(36) NOT NULL,
        NOTE_ID CHAR(36) NOT NULL,
        FOREIGN KEY(CONTACT_ID) REFERENCES ERP.CONTACT(CONTACT_ID),
        FOREIGN KEY(NOTE_ID) REFERENCES ERP.CONTACT_NOTE(NOTE_ID),
        PRIMARY KEY(CONTACT_ID,NOTE_ID)
    );
    
    CREATE TABLE ERP.CONTACT_REL_DATA
    (
        CONTACT_ID CHAR(36) NOT NULL,
        CONTACT_DATA_ID CHAR(36) NOT NULL,
        FOREIGN KEY(CONTACT_ID) REFERENCES ERP.CONTACT(CONTACT_ID),
        FOREIGN KEY(CONTACT_DATA_ID) REFERENCES ERP.CONTACT_DATA(CONTACT_DATA_ID),
        PRIMARY KEY(CONTACT_ID,CONTACT_DATA_ID)
    );
    
    CREATE TABLE ERP.CONTACT_REL_AGENT
    (
        CONTACT_ID CHAR(36) NOT NULL,
        AGENT_ID CHAR(36) NOT NULL,
        FOREIGN KEY(CONTACT_ID) REFERENCES ERP.CONTACT(CONTACT_ID),
        FOREIGN KEY(AGENT_ID) REFERENCES ERP.CONTACT_AGENT(AGENT_ID),
        PRIMARY KEY(CONTACT_ID,AGENT_ID)
    );
    
    CREATE TABLE ERP.CONTACT_REL_KEYS
    (
        CONTACT_ID CHAR(36) NOT NULL,
        KEY_ID CHAR(36) NOT NULL,
        FOREIGN KEY(CONTACT_ID) REFERENCES ERP.CONTACT(CONTACT_ID),
        FOREIGN KEY(KEY_ID) REFERENCES ERP.CONTACT_KEYS(KEY_ID),
        PRIMARY KEY(CONTACT_ID,KEY_ID)
    );
    
    CREATE TABLE ERP.CONTACT_REL_XTENDED
    (
        CONTACT_ID CHAR(36) NOT NULL,
        XTENDED_ID CHAR(36) NOT NULL,
        FOREIGN KEY(CONTACT_ID) REFERENCES ERP.CONTACT(CONTACT_ID),
        FOREIGN KEY(XTENDED_ID) REFERENCES ERP.CONTACT_XTENDED(XTENDED_ID),
        PRIMARY KEY(CONTACT_ID,XTENDED_ID)
    );
    
    CREATE TABLE ERP.CONTACT_MAIL_ADDRESS_REL_TYPES
    (
        MAIL_ADDRESS_ID CHAR(36) NOT NULL,
        TYPE_ID CHAR(36) NOT NULL,
        FOREIGN KEY(MAIL_ADDRESS_ID) REFERENCES ERP.CONTACT_MAIL_ADDRESS(MAIL_ADDRESS_ID),
        FOREIGN KEY(TYPE_ID) REFERENCES ERP.CONTACT_TYPES(TYPE_ID),
        PRIMARY KEY(MAIL_ADDRESS_ID,TYPE_ID)
    );
    
    CREATE TABLE ERP.CONTACT_PHONE_NUMBER_REL_TYPES
    (
        PHONE_NUMBER_ID CHAR(36) NOT NULL,
        TYPE_ID CHAR(36) NOT NULL,
        FOREIGN KEY(PHONE_NUMBER_ID) REFERENCES ERP.CONTACT_PHONE_NUMBER(PHONE_NUMBER_ID),
        FOREIGN KEY(TYPE_ID) REFERENCES ERP.CONTACT_TYPES(TYPE_ID),
        PRIMARY KEY(PHONE_NUMBER_ID,TYPE_ID)
    );
    
    CREATE TABLE ERP.CONTACT_EMAIL_REL_TYPES
    (
        EMAIL_ID CHAR(36) NOT NULL,
        TYPE_ID CHAR(36) NOT NULL,
        FOREIGN KEY(EMAIL_ID) REFERENCES ERP.CONTACT_EMAIL(EMAIL_ID),
        FOREIGN KEY(TYPE_ID) REFERENCES ERP.CONTACT_TYPES(TYPE_ID),
        PRIMARY KEY(EMAIL_ID,TYPE_ID)
    );
    
    CREATE TABLE ERP.CONTACT_NOTE_REL_TYPES
    (
        NOTE_ID CHAR(36) NOT NULL,
        TYPE_ID CHAR(36) NOT NULL,
        FOREIGN KEY(NOTE_ID) REFERENCES ERP.CONTACT_NOTE(NOTE_ID),
        FOREIGN KEY(TYPE_ID) REFERENCES ERP.CONTACT_TYPES(TYPE_ID),
        PRIMARY KEY(NOTE_ID,TYPE_ID)
    );
    
    CREATE TABLE ERP.CONTACT_KEY_REL_TYPES
    (
        KEY_ID CHAR(36) NOT NULL,
        TYPE_ID CHAR(36) NOT NULL,
        FOREIGN KEY(KEY_ID) REFERENCES ERP.CONTACT_KEYS(KEY_ID),
        FOREIGN KEY(TYPE_ID) REFERENCES ERP.CONTACT_TYPES(TYPE_ID),
        PRIMARY KEY(KEY_ID,TYPE_ID)
    );
    
    CREATE TABLE ERP.CONTACT_DATA_REL_TYPES
    (
        CONTACT_DATA_ID CHAR(36) NOT NULL,
        TYPE_ID CHAR(36) NOT NULL,
        FOREIGN KEY(CONTACT_DATA_ID) REFERENCES ERP.CONTACT_DATA(CONTACT_DATA_ID),
        FOREIGN KEY(TYPE_ID) REFERENCES ERP.CONTACT_TYPES(TYPE_ID),
        PRIMARY KEY(CONTACT_DATA_ID,TYPE_ID)
    );
    
    CREATE TABLE ERP.CONTACT_DATA_REL_ENCODING_TYPES
    (
        CONTACT_DATA_ID CHAR(36) NOT NULL,
        ENCODING_TYPE_ID CHAR(36) NOT NULL,
        FOREIGN KEY(CONTACT_DATA_ID) REFERENCES ERP.CONTACT_DATA(CONTACT_DATA_ID),
        FOREIGN KEY(ENCODING_TYPE_ID) REFERENCES ERP.CONTACT_ENCODING_TYPES(ENCODING_TYPE_ID),
        PRIMARY KEY(CONTACT_DATA_ID,ENCODING_TYPE_ID)
    );
    

    0 讨论(0)
提交回复
热议问题