Перейти к основному содержимому

Схема базы данных

Обзор всех таблиц базы данных в FeedbackPulse SaaS.


Справочник таблиц

Таблицы платформы (не привязаны к арендатору)

ТаблицаОписаниеКлючевые столбцы
platform_settingsГлобальная конфигурация ключ-значение (зашифрована для секретов)key, value
plansТарифные планы с ценами и флагами возможностейname, monthly_price, annual_price, max_*, feature_*
landing_pagesДанные конструктора лендинга с кэшированным HTMLsections (JSON), cached_html, is_published
payment_eventsЖурнал webhook-событий Stripe/PayPalgateway, event_id, event_type, payload (JSON)
audit_logsЖурнал аудита действийuser_id, action, description, old_values, new_values
cron_logsЖурнал выполнения запланированных задачjob_name, status, output, duration_seconds

Таблицы арендаторов

ТаблицаОписаниеКлючевые столбцы
tenantsМультитенантные аккаунтыname, slug, subdomain, plan_id, status, settings (JSON)
tenant_domainsМаппинги кастомных доменовtenant_id, domain, status, verified_at
usersВсе аккаунты пользователей (все роли)name, email, role, tenant_id, two_factor_secret
productsПродукты обратной связиtenant_id, name, slug, type, category, is_active
feedback_campaignsКонфигурации форм обратной связиtenant_id, product_id, name, slug, survey_schema (JSON), status
feedback_submissionsОтдельные записи обратной связиtenant_id, campaign_id, product_id, star_rating, nps_score, text_feedback, sentiment_*, status
feedback_tagsОпределения теговtenant_id, name
feedback_submission_tagСводная таблица многие-ко-многимsubmission_id, tag_id
team_membersЗаписи команды арендатораtenant_id, user_id, role
team_invitationsОжидающие приглашенияtenant_id, email, role, token, expires_at
api_keysAPI-ключи арендатора (хэшированные)tenant_id, name, key, scopes, is_active
roadmap_itemsПубличные элементы дорожной картыtenant_id, product_id, title, status, vote_count
roadmap_votesАнонимные голоса по элементамroadmap_item_id, email
feature_requestsПредложения функций от сообществаtenant_id, roadmap_item_id, email, description, status
changelog_entriesЗаметки к релизу продуктаtenant_id, product_id, title, body, version, published_at
notificationsВнутриприложенческие уведомленияtenant_id, user_id, type, title, message, data (JSON)
webhook_logsЛоги доставки исходящих вебхуковtenant_id, url, event, payload (JSON), response_code
data_deletion_requestsОтслеживание удалений GDPRtenant_id, requester_email, status, completed_at
referral_codesРеферальные кодыtenant_id, code, reward_type, uses, max_uses
referral_conversionsОтслеживание конверсийreferral_code_id, converted_tenant_id, reward_amount
scheduled_report_logsЖурнал доставки отчётовtenant_id, report_type, status, sent_at

Системные таблицы Laravel

ТаблицаОписание
migrationsОтслеживание миграций
password_reset_tokensТокены сброса пароля (с учётом арендатора)
sessionsПользовательские сессии
cacheКэш приложения
jobsЗадачи очереди
failed_jobsНеудачные задачи очереди

Ключевые связи

plans <---- tenants <---- users
|
|---- products <---- feedback_campaigns <---- feedback_submissions
| |
| +---- feedback_tags (M2M)
|
|---- roadmap_items <---- roadmap_votes
| <---- feature_requests
|
|---- changelog_entries
|---- team_members ---- users
|---- team_invitations
|---- api_keys
|---- notifications
+---- webhook_logs

Изоляция данных

Каждая таблица, привязанная к арендатору, имеет:

  • Внешний ключ tenant_id с ON DELETE CASCADE
  • Составной индекс по (tenant_id, created_at)
  • Глобальный scope TenantScope для автоматической фильтрации

При удалении арендатора все их данные каскадно удаляются автоматически.


Следующие шаги