CREATE TABLE documents (
tenant_id UUID,
document_id UUID DEFAULT gen_random_uuid(),
title VARCHAR(255),
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
author_id UUID,
storage_location VARCHAR(255), -- Location where the document is stored
PRIMARY KEY (tenant_id, document_id),
FOREIGN KEY (tenant_id) REFERENCES tenants(id),
FOREIGN KEY (tenant_id, author_id) REFERENCES users.tenant_users(tenant_id, user_id)
);
CREATE TABLE document_versions (
tenant_id UUID,
document_id UUID,
version_id UUID DEFAULT gen_random_uuid(),
version_number INT,
content TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
author_id UUID,
PRIMARY KEY (tenant_id, document_id, version_id),
FOREIGN KEY (tenant_id, document_id) REFERENCES documents(tenant_id, document_id),
FOREIGN KEY (tenant_id, author_id) REFERENCES users.tenant_users(tenant_id, user_id)
);
CREATE TABLE document_comments (
tenant_id UUID,
comment_id UUID DEFAULT gen_random_uuid(),
document_id UUID,
user_id UUID,
comment TEXT,
vector_embedding VECTOR(768), -- Adjust the dimensions as needed
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (tenant_id, document_id),
FOREIGN KEY (tenant_id, document_id) REFERENCES documents(tenant_id, document_id),
FOREIGN KEY (tenant_id, user_id) REFERENCES users.tenant_users(tenant_id, user_id)
);
CREATE TABLE teamspaces (
tenant_id UUID,
teamspace_id UUID DEFAULT gen_random_uuid(),
name VARCHAR(255),
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by UUID,
PRIMARY KEY (tenant_id, teamspace_id),
FOREIGN KEY (tenant_id, created_by) REFERENCES users.tenant_users(tenant_id, user_id)
);
CREATE TABLE teamspace_documents (
teamspace_id UUID,
tenant_id UUID,
document_id UUID,
PRIMARY KEY (tenant_id, teamspace_id, document_id),
FOREIGN KEY (tenant_id, teamspace_id) REFERENCES teamspaces(tenant_id, teamspace_id),
FOREIGN KEY (tenant_id, document_id) REFERENCES documents(tenant_id, document_id)
);
CREATE TABLE document_embeddings (
tenant_id UUID,
document_id UUID,
chunk_id UUID DEFAULT gen_random_uuid(),
chunk_content TEXT,
vector_embedding VECTOR,
PRIMARY KEY (tenant_id, document_id, chunk_id),
FOREIGN KEY (tenant_id, document_id) REFERENCES documents(tenant_id, document_id)
);
CREATE TABLE favourites (
tenant_id UUID,
user_id UUID,
document_id UUID,
PRIMARY KEY (tenant_id, user_id, document_id),
FOREIGN KEY (tenant_id, user_id) REFERENCES users.tenant_users(tenant_id, user_id),
FOREIGN KEY (tenant_id, document_id) REFERENCES documents(tenant_id, document_id)
);