Допустим, у нас есть таблица клиентов для спортивных брендов, таких как 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 |
+-------------------+----------+--------------+
Как мы можем вести регистрацию в этом случае, когда мы хотим записать неисправные фильтры для спортивного и фитнес-уровня? Я думаю о двух вариантах
- Создать разные таблицы для каждого неисправного фильтра. -Sports Failed Filter -FitnessLevel Failed Filter
+----------------------+-------------+----------------+
| Sports Failed Filter | | |
+----------------------+-------------+----------------+
| Id | CustomerId | SportsFilterId |
| 1 | 1 | 2 |
| 2 | 1 | 3 |
+----------------------+-------------+----------------+
Однако если у нас есть 10 фильтров, это означает, что у нас также будет 10 таблиц с ошибками фильтров. Я думаю, что это очень трудно поддерживать.
Вместо другой таблицы для раскрывающихся значений, таких как уровень спорта и фитнес, мы можем создать таблицу поиска и одну таблицу с ошибками. Я думаю, что компромисс не прост и нет строгой ссылочной целостности.
Пожалуйста, дайте мне знать, если у вас есть другое решение для этого.
РЕДАКТИРОВАТЬ: Эти фильтры используются в есть бэкэнд-приложение и логика фильтрации c. Я не планирую включать эту логику c в базу данных, так как запрос будет очень сложным и сложным в обслуживании.