Ведение журнала для нескольких таблиц - PullRequest
0 голосов
/ 12 февраля 2020

Допустим, у нас есть таблица клиентов для спортивных брендов, таких как nike и adidas.

+--------------+------------+
| Client Table |            |
+--------------+------------+
| Id           | ClientName |
| 1            | Nike       |
| 2            | Adidas     |
+--------------+------------+

Мы также записываем информацию о клиентах и ​​их предпочтительный уровень спорта и фитнеса. Спорт и уровень фитнеса используются в выпадающих списках.

+--------------+------------+
| Sports Table |            |
+--------------+------------+
| Id           | Name       |
| 1            | Basketball |
| 2            | Volleyball |
+--------------+------------+

+------------------+---------------+
| Fitnesslvl Table |               |
+------------------+---------------+
| Id               | Fitness Level |
| 1                | Beginner      |
| 2                | Intermediate  |
| 3                | Advance       |
+------------------+---------------+

+----------------+--------------+----------+----------------+
| Customer Table |              |          |                |
+----------------+--------------+----------+----------------+
| Id             | CustomerName | SportsId | FitnessLevelId |
| 1              | John         | 1        | 1              |
| 2              | Doe          | 2        | 3              |
+----------------+--------------+----------+----------------+

Тогда спортивные бренды хотят отфильтровать наших клиентов по уровню спорта и фитнеса. В этом примере nike хочет заниматься всеми видами спорта, в то время как adidas хочет, чтобы клиент интересовался только баскетболом. Аналогичным образом, nike хочет, чтобы клиент был на любом уровне физической подготовки, а adidas - только на расширенном фитнес-уровне.

+---------------+----------+----------+
| Sports Filter |          |          |
+---------------+----------+----------+
| Id            | ClientId | SportsId |
| 1             | 1        | 1        |
| 2             | 1        | 2        |
| 3             | 2        | 1        |
+---------------+----------+----------+

+-------------------+----------+--------------+
| Fitnesslvl Filter |          |              |
+-------------------+----------+--------------+
| Id                | ClientId | FitnessLvlId |
| 1                 | 1        | 1            |
| 2                 | 1        | 2            |
| 3                 | 1        | 3            |
| 4                 | 2        | 3            |
+-------------------+----------+--------------+

Как мы можем вести регистрацию в этом случае, когда мы хотим записать неисправные фильтры для спортивного и фитнес-уровня? Я думаю о двух вариантах

  1. Создать разные таблицы для каждого неисправного фильтра. -Sports Failed Filter -FitnessLevel Failed Filter
+----------------------+-------------+----------------+
| Sports Failed Filter |             |                |
+----------------------+-------------+----------------+
| Id                   | CustomerId  | SportsFilterId |
| 1                    | 1           | 2              |
| 2                    | 1           | 3              |
+----------------------+-------------+----------------+

Однако если у нас есть 10 фильтров, это означает, что у нас также будет 10 таблиц с ошибками фильтров. Я думаю, что это очень трудно поддерживать.

Вместо другой таблицы для раскрывающихся значений, таких как уровень спорта и фитнес, мы можем создать таблицу поиска и одну таблицу с ошибками. Я думаю, что компромисс не прост и нет строгой ссылочной целостности.

Пожалуйста, дайте мне знать, если у вас есть другое решение для этого.

РЕДАКТИРОВАТЬ: Эти фильтры используются в есть бэкэнд-приложение и логика фильтрации c. Я не планирую включать эту логику c в базу данных, так как запрос будет очень сложным и сложным в обслуживании.

...