Advertisement
akozhomka

Бонусы (структура таблиц)

Feb 11th, 2022
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 7.06 KB | None | 0 0
  1. CREATE SCHEMA IF NOT EXISTS bonus
  2. CHARACTER SET utf8 COLLATE utf8_general_ci;
  3.  
  4. CREATE TABLE IF NOT EXISTS bonus.bonus_segment
  5. (
  6.     id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
  7.     , name VARCHAR(150) NOT NULL UNIQUE COMMENT 'название сегмента'
  8.     , segment_amount INT UNSIGNED NOT NULL COMMENT 'сумма бонусов за переход в этот сегмент'
  9.     , segment_expiration_days INT UNSIGNED NOT NULL COMMENT 'число дней действия бонусов'
  10. )
  11. CHARACTER SET utf8 COLLATE utf8_general_ci
  12. COMMENT 'Перечень сегментов с данными по бонусам';
  13.  
  14. CREATE TABLE IF NOT EXISTS bonus.bonus_customer_segment
  15. (
  16.     id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
  17.     , customer_id INT(11) NOT NULL
  18.     , bonus_segment_id SMALLINT UNSIGNED NOT NULL
  19.     , created DATETIME NOT NULL
  20.     , UNIQUE (customer_id, bonus_segment_id)
  21.     , FOREIGN KEY (customer_id) REFERENCES yii_doc.customers(id)
  22.         ON UPDATE CASCADE
  23.         ON DELETE RESTRICT
  24.     , FOREIGN KEY (bonus_segment_id) REFERENCES bonus.bonus_segment(id)
  25.         ON UPDATE CASCADE
  26.         ON DELETE RESTRICT
  27. )
  28. CHARACTER SET utf8 COLLATE utf8_general_ci
  29. COMMENT 'История перехода клиентов по сегментам';
  30.  
  31. CREATE TABLE IF NOT EXISTS bonus.bonus_settings
  32. (
  33.     id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
  34.     , name VARCHAR(50) NOT NULL UNIQUE
  35.     , value VARCHAR(50) NOT NULL
  36.     , comment VARCHAR(150) NOT NULL COMMENT 'Описание назначения константы, ее единицы измерения'
  37. )
  38. CHARACTER SET utf8 COLLATE utf8_general_ci
  39. COMMENT 'Таблица внутренних настроек для бонусов';
  40.  
  41. CREATE TABLE IF NOT EXISTS bonus.customer_bonus
  42. (
  43.     id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
  44.     , customer_id INT(11) NOT NULL UNIQUE COMMENT 'ссылка на таблицу клиентов yii_doc.customers'
  45.     , balance INT UNSIGNED DEFAULT 0 COMMENT 'текущий доступный баланс бонусов'
  46.     , expiration_date DATETIME COMMENT 'дата окончания срока действия бонусов'
  47.     , FOREIGN KEY (customer_id) REFERENCES yii_doc.customers(id)
  48.         ON UPDATE CASCADE
  49.         ON DELETE RESTRICT
  50.     , INDEX(expiration_date DESC, customer_id DESC)
  51. )
  52. CHARACTER SET utf8 COLLATE utf8_general_ci
  53. COMMENT 'Бонусы клиентов (актуальная информация)';
  54.  
  55. CREATE TABLE IF NOT EXISTS bonus.bonus_docs_credit_segment
  56. (
  57.     id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
  58.     , bonus_customer_segment_id INT UNSIGNED NOT NULL UNIQUE COMMENT 'ссылка на таблицу bonus.bonus_customer_segment'
  59.     , completed BIT(1) NOT NULL DEFAULT 0 COMMENT 'статус операции: 0 - новая, 1 - завершенная'
  60.     , amount INT UNSIGNED NOT NULL
  61.     , created DATETIME NOT NULL
  62.     , updated DATETIME NOT NULL
  63.     , FOREIGN KEY (bonus_customer_segment_id) REFERENCES bonus.bonus_customer_segment(id)
  64.         ON UPDATE CASCADE
  65.         ON DELETE RESTRICT
  66.     , INDEX(completed DESC, bonus_customer_segment_id DESC)
  67. )
  68.     CHARACTER SET utf8 COLLATE utf8_general_ci
  69.     COMMENT 'Документы: начисление бонусов за попадание клиентов в сегмент';
  70.  
  71. CREATE TABLE IF NOT EXISTS bonus.bonus_docs_debit
  72. (
  73.     id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
  74.     , order_product_id INT(11) NOT NULL UNIQUE COMMENT 'ссылка на таблицу yii_doc.order_product'
  75.     , completed BIT(1) NOT NULL DEFAULT 0 COMMENT 'статус операции: 0 - новая, 1 - завершенная'
  76.     , amount INT UNSIGNED NOT NULL COMMENT 'количество бонусов за товар в заказе'
  77.     , created DATETIME NOT NULL
  78.     , updated DATETIME NOT NULL
  79.     , FOREIGN KEY (order_product_id) REFERENCES yii_doc.order_product(id)
  80.         ON UPDATE CASCADE
  81.         ON DELETE RESTRICT
  82.     , INDEX(completed DESC, order_product_id DESC)
  83. )
  84. CHARACTER SET utf8 COLLATE utf8_general_ci
  85. COMMENT 'Документы: списания бонусов';
  86.  
  87. CREATE TABLE IF NOT EXISTS bonus.bonus_docs_credit_refund
  88. (
  89.     id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
  90.     , refund_id INT(11) NOT NULL UNIQUE COMMENT 'ссылка на таблицу yii_doc.refund'
  91.     , completed BIT(1) NOT NULL DEFAULT 0 COMMENT 'статус операции: 0 - новая, 1 - завершенная'
  92.     , amount INT UNSIGNED NOT NULL
  93.     , created DATETIME NOT NULL
  94.     , updated DATETIME NOT NULL
  95.     , FOREIGN KEY (refund_id) REFERENCES yii_doc.refund(id)
  96.         ON UPDATE CASCADE
  97.         ON DELETE RESTRICT
  98.     , INDEX(completed DESC, refund_id DESC)
  99. )
  100. CHARACTER SET utf8 COLLATE utf8_general_ci
  101. COMMENT 'Документы: возврат бонусов при возврате товара';
  102.  
  103. CREATE TABLE IF NOT EXISTS bonus.bonus_docs_nullify
  104. (
  105.     id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
  106.     , customer_id INT(11) NOT NULL COMMENT 'ссылка на таблицу клиентов yii_doc.customers'
  107.     , completed BIT(1) NOT NULL DEFAULT 0 COMMENT 'статус операции: 0 - новая, 1 - завершенная'
  108.     , amount INT UNSIGNED NOT NULL
  109.     , created DATETIME NOT NULL
  110.     , updated DATETIME NOT NULL
  111.     , FOREIGN KEY (customer_id) REFERENCES yii_doc.customers(id)
  112.         ON UPDATE CASCADE
  113.         ON DELETE RESTRICT
  114.     , INDEX(completed, customer_id)
  115. )
  116. CHARACTER SET utf8 COLLATE utf8_general_ci
  117. COMMENT 'Документы: списывание бонусов по сроку жизни';
  118.  
  119. CREATE TABLE IF NOT EXISTS bonus.bonus_operations_history
  120. (
  121.     id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY
  122.     , customer_id INT(11) NOT NULL COMMENT 'ссылка на таблицу клиентов yii_doc.customers'
  123.     , operation_type ENUM('debit', 'credit_segment', 'credit_reverse', 'credit_refund', 'nullify') NOT NULL
  124.         COMMENT 'указатель на связанную таблицу: "debit" - bonus.bonus_docs_debit; "credit_segment" - bonus.bonus_docs_credit_segment; "credit_reverse" - bonus.bonus_docs_debit; "credit_refund" - bonus.bonus_docs_credit_refund; "nullify" - bonus.bonus_docs_nullify'
  125.     , operation_id INT UNSIGNED NOT NULL COMMENT 'id записи из таблицы указанной в operation_type'
  126.     , amount INT NOT NULL COMMENT 'Сумма операции'
  127.     , balance_before INT UNSIGNED NOT NULL COMMENT 'Общий баланс до операции'
  128.     , balance_after INT UNSIGNED NOT NULL COMMENT 'Общий баланс после операции'
  129.     , created DATETIME NOT NULL DEFAULT NOW() COMMENT 'Время создания записи'
  130.     , FOREIGN KEY (customer_id) REFERENCES yii_doc.customers(id)
  131.         ON UPDATE CASCADE
  132.         ON DELETE RESTRICT
  133.     , INDEX(customer_id, operation_type, operation_id)
  134. )
  135. CHARACTER SET utf8 COLLATE utf8_general_ci
  136. COMMENT 'История операций по движению бонусов клиента';
  137.  
  138.  
  139. # !!!!! простой ОТКАТ миграции !!!!!
  140. DROP SCHEMA IF EXISTS bonus;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement