Types de champs
Types composes
EMAILS, PHONES
Les types composes creent automatiquement une table enfant liee par cle etrangere a l'objet parent. Ils n'ont pas de colonne sur la table parente.
EMAILS
Stocke plusieurs adresses email par enregistrement dans une table enfant dediee.
| Propriete | Valeur |
|---|---|
| SQL | Aucune colonne sur la table parente (virtuel) |
| Table enfant | {objet}_emails (ex : contacts_emails) |
Structure de la table enfant :
CREATE TABLE "contacts_emails" (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
contact_id UUID NOT NULL, -- FK → contacts (CASCADE)
email_address VARCHAR(255) NOT NULL,
is_primary BOOLEAN DEFAULT false,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
deleted_at TIMESTAMP DEFAULT NULL
)
CREATE UNIQUE INDEX "idx_contacts_emails_unique_email"
ON "contacts_emails" ("contact_id", "email_address")La table enfant est un objet systeme cache (isHidden: true, isSystem: true). Le champ email_address est indexe pour la recherche.
PHONES
Stocke plusieurs numeros de telephone par enregistrement dans une table enfant dediee.
| Propriete | Valeur |
|---|---|
| SQL | Aucune colonne sur la table parente (virtuel) |
| Table enfant | {objet}_phones (ex : contacts_phones) |
Structure de la table enfant :
CREATE TABLE "contacts_phones" (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
contact_id UUID NOT NULL, -- FK → contacts (CASCADE)
phone_number VARCHAR(50) NOT NULL,
is_primary BOOLEAN DEFAULT false,
created_at TIMESTAMP DEFAULT NOW(),
updated_at TIMESTAMP DEFAULT NOW(),
deleted_at TIMESTAMP DEFAULT NULL
)
CREATE UNIQUE INDEX "idx_contacts_phones_unique_phone"
ON "contacts_phones" ("contact_id", "phone_number")