201 lines
5.9 KiB
SQL
201 lines
5.9 KiB
SQL
-- Tabla de redes sociales (SocialMedia) y relación uno a uno con Person
|
|
CREATE TABLE IF NOT EXISTS SocialMedia (
|
|
Id TEXT PRIMARY KEY,
|
|
Facebook TEXT,
|
|
Instagram TEXT,
|
|
Twitter TEXT,
|
|
BlueSky TEXT,
|
|
Tiktok TEXT,
|
|
Linkedin TEXT,
|
|
Pinterest TEXT,
|
|
Discord TEXT,
|
|
Reddit TEXT,
|
|
Other TEXT
|
|
);
|
|
|
|
-- Person: cada persona tiene un grupo de redes sociales (uno a uno, fk opcional)
|
|
CREATE TABLE IF NOT EXISTS Persons (
|
|
Id TEXT PRIMARY KEY,
|
|
Name TEXT NOT NULL,
|
|
ProfilePicture TEXT,
|
|
Avatar TEXT,
|
|
SocialMediaId TEXT,
|
|
Bio TEXT,
|
|
CreatedAt TEXT NOT NULL,
|
|
UpdatedAt TEXT,
|
|
FOREIGN KEY (SocialMediaId) REFERENCES SocialMedia(Id)
|
|
);
|
|
|
|
-- User: es una persona (herencia por clave primaria compartida)
|
|
CREATE TABLE IF NOT EXISTS Users (
|
|
Id TEXT PRIMARY KEY, -- MISMA clave y valor que Persons.Id
|
|
Email TEXT NOT NULL,
|
|
Password TEXT NOT NULL,
|
|
Salt TEXT NOT NULL,
|
|
FOREIGN KEY (Id) REFERENCES Persons(Id)
|
|
);
|
|
|
|
-- Un usuario puede ver muchas galerías (muchos-a-muchos: Galleries <-> Users)
|
|
CREATE TABLE IF NOT EXISTS GalleryUserViewers (
|
|
GalleryId TEXT NOT NULL,
|
|
UserId TEXT NOT NULL,
|
|
PRIMARY KEY (GalleryId, UserId),
|
|
FOREIGN KEY (GalleryId) REFERENCES Galleries(Id),
|
|
FOREIGN KEY (UserId) REFERENCES Users(Id)
|
|
);
|
|
|
|
-- Un usuario ha creado muchas galerías (uno a muchos)
|
|
-- Una galería solo puede ser creada por un usuario
|
|
CREATE TABLE IF NOT EXISTS Galleries (
|
|
Id TEXT PRIMARY KEY,
|
|
Title TEXT,
|
|
Description TEXT,
|
|
CreatedAt TEXT,
|
|
UpdatedAt TEXT,
|
|
CreatedBy TEXT NOT NULL, -- FK a Users
|
|
IsPublic INTEGER DEFAULT 1,
|
|
IsArchived INTEGER DEFAULT 0,
|
|
IsFavorite INTEGER DEFAULT 0,
|
|
EventId TEXT, -- FK opcional a Events (una galería puede asociarse a un evento)
|
|
FOREIGN KEY (CreatedBy) REFERENCES Users(Id),
|
|
FOREIGN KEY (EventId) REFERENCES Events(Id)
|
|
);
|
|
|
|
-- Galería-Photo: una galería contiene muchas imagenes, una imagen puede estar en muchas galerías (muchos-a-muchos)
|
|
CREATE TABLE IF NOT EXISTS GalleryPhotos (
|
|
GalleryId TEXT NOT NULL,
|
|
PhotoId TEXT NOT NULL,
|
|
PRIMARY KEY (GalleryId, PhotoId),
|
|
FOREIGN KEY (GalleryId) REFERENCES Galleries(Id),
|
|
FOREIGN KEY (PhotoId) REFERENCES Photos(Id)
|
|
);
|
|
|
|
-- Tabla de eventos
|
|
CREATE TABLE IF NOT EXISTS Events (
|
|
Id TEXT PRIMARY KEY,
|
|
Title TEXT NOT NULL,
|
|
Description TEXT,
|
|
Date TEXT,
|
|
Location TEXT,
|
|
CreatedAt TEXT NOT NULL,
|
|
UpdatedAt TEXT NOT NULL,
|
|
CreatedBy TEXT,
|
|
UpdatedBy TEXT,
|
|
IsDeleted INTEGER NOT NULL DEFAULT 0,
|
|
DeletedAt TEXT
|
|
);
|
|
|
|
-- Tabla de fotos
|
|
CREATE TABLE IF NOT EXISTS Photos (
|
|
Id TEXT PRIMARY KEY,
|
|
Title TEXT NOT NULL,
|
|
Description TEXT,
|
|
Extension TEXT,
|
|
LowResUrl TEXT,
|
|
MidResUrl TEXT,
|
|
HighResUrl TEXT,
|
|
CreatedAt TEXT,
|
|
UpdatedAt TEXT,
|
|
CreatedBy TEXT NOT NULL, -- Persona que subió la foto: FK a Persons
|
|
UpdatedBy TEXT,
|
|
EventId TEXT, -- Una photo solo puede tener un evento asociado (FK)
|
|
RankingId TEXT,
|
|
IsFavorite INTEGER DEFAULT 0,
|
|
IsPublic INTEGER DEFAULT 1,
|
|
IsArchived INTEGER DEFAULT 0,
|
|
FOREIGN KEY (CreatedBy) REFERENCES Persons(Id),
|
|
FOREIGN KEY (EventId) REFERENCES Events(Id)
|
|
);
|
|
|
|
-- Una persona puede salir en muchas fotos, y una foto puede tener muchas personas (muchos-a-muchos)
|
|
CREATE TABLE IF NOT EXISTS PhotoPersons (
|
|
PhotoId TEXT NOT NULL,
|
|
PersonId TEXT NOT NULL,
|
|
PRIMARY KEY (PhotoId, PersonId),
|
|
FOREIGN KEY (PhotoId) REFERENCES Photos(Id),
|
|
FOREIGN KEY (PersonId) REFERENCES Persons(Id)
|
|
);
|
|
|
|
-- Un usuario puede comprar muchas fotos para verlas, y una foto puede haber sido comprada por muchos usuarios
|
|
-- (solo necesario si IsPublic = 0)
|
|
CREATE TABLE IF NOT EXISTS PhotoUserBuyers (
|
|
PhotoId TEXT NOT NULL,
|
|
UserId TEXT NOT NULL,
|
|
PRIMARY KEY (PhotoId, UserId),
|
|
FOREIGN KEY (PhotoId) REFERENCES Photos(Id),
|
|
FOREIGN KEY (UserId) REFERENCES Users(Id)
|
|
);
|
|
|
|
-- Tabla de tags (únicos)
|
|
CREATE TABLE IF NOT EXISTS Tags (
|
|
Id TEXT PRIMARY KEY,
|
|
Name TEXT NOT NULL UNIQUE,
|
|
CreatedAt TEXT NOT NULL
|
|
);
|
|
|
|
-- Una foto puede tener muchos tags (muchos-a-muchos)
|
|
CREATE TABLE IF NOT EXISTS PhotoTags (
|
|
PhotoId TEXT NOT NULL,
|
|
TagId TEXT NOT NULL,
|
|
PRIMARY KEY (PhotoId, TagId),
|
|
FOREIGN KEY (PhotoId) REFERENCES Photos(Id),
|
|
FOREIGN KEY (TagId) REFERENCES Tags(Id)
|
|
);
|
|
|
|
-- Un evento puede tener muchos tags (muchos-a-muchos)
|
|
CREATE TABLE IF NOT EXISTS EventTags (
|
|
EventId TEXT NOT NULL,
|
|
TagId TEXT NOT NULL,
|
|
PRIMARY KEY (EventId, TagId),
|
|
FOREIGN KEY (EventId) REFERENCES Events(Id),
|
|
FOREIGN KEY (TagId) REFERENCES Tags(Id)
|
|
);
|
|
|
|
-- Una galería puede tener muchos tags (muchos-a-muchos)
|
|
CREATE TABLE IF NOT EXISTS GalleryTags (
|
|
GalleryId TEXT NOT NULL,
|
|
TagId TEXT NOT NULL,
|
|
PRIMARY KEY (GalleryId, TagId),
|
|
FOREIGN KEY (GalleryId) REFERENCES Galleries(Id),
|
|
FOREIGN KEY (TagId) REFERENCES Tags(Id)
|
|
);
|
|
|
|
-- Rankings (por si corresponde)
|
|
CREATE TABLE IF NOT EXISTS Rankings (
|
|
Id TEXT PRIMARY KEY,
|
|
TotalVotes INTEGER NOT NULL,
|
|
UpVotes INTEGER NOT NULL,
|
|
DownVotes INTEGER NOT NULL
|
|
);
|
|
|
|
-- Permissions y Roles, tal y como en el mensaje anterior...
|
|
CREATE TABLE IF NOT EXISTS Permissions (
|
|
Id TEXT PRIMARY KEY,
|
|
Name TEXT NOT NULL,
|
|
Description TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS Roles (
|
|
Id TEXT PRIMARY KEY,
|
|
Name TEXT NOT NULL,
|
|
Description TEXT,
|
|
BaseRoleModelId TEXT,
|
|
FOREIGN KEY (BaseRoleModelId) REFERENCES Roles(Id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS UserRoles (
|
|
UserId TEXT NOT NULL,
|
|
RoleId TEXT NOT NULL,
|
|
PRIMARY KEY (UserId, RoleId),
|
|
FOREIGN KEY (UserId) REFERENCES Users(Id),
|
|
FOREIGN KEY (RoleId) REFERENCES Roles(Id)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS RolePermissions (
|
|
RoleId TEXT NOT NULL,
|
|
PermissionId TEXT NOT NULL,
|
|
PRIMARY KEY (RoleId, PermissionId),
|
|
FOREIGN KEY (RoleId) REFERENCES Roles(Id),
|
|
FOREIGN KEY (PermissionId) REFERENCES Permissions(Id)
|
|
);
|