Как я могу запросить список деталей, чтобы можно было легко сравнивать детали из разных групп? (сводная таблица?) - PullRequest
0 голосов
/ 21 марта 2019

У меня есть таблица, которая отслеживает информацию об автомобилях (для этого примера, скажем,).Каждая запись содержит описание определенной части автомобиля.Например, вот как выглядит фрагмент данных таблицы:

+-----+-----------+--------------+-------------+
| ID  | ModelName | PartCategory | Description |
+-----+-----------+--------------+-------------+
|   1 | name1     | category1    | blah blah   |
|   2 | name1     | category2    | blah blah   |
|   3 | name2     | category2    | blah blah   |
|   4 | name2     | category3    | blah blah   |
|   5 | name2     | category4    | blah blah   |
| ... | ...       | ...          | ...         |
+-----+-----------+--------------+-------------+

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

+-----------+-------+--------+--------+-----+
| category  | name1 | name2  | name3  | ... |
+-----------+-------+--------+--------+-----+
| category1 | Value | Value  | Value  | ... |
| category2 | Value | Value  | Value  | ... |
| category3 | Value | (null) | Value  | ... |
| category4 | Value | Value  | (null) | ... |
+-----------+-------+--------+--------+-----+
(Is this what you would call a table pivot?)

Или эта схема вообще плоха для этой цели?Сравнение моделей автомобилей является основной целью этого приложения, поэтому, если структура таблицы в первом разрезе кажется плохой идеей, я был бы открыт для другой модели.

1 Ответ

0 голосов
/ 21 марта 2019

Первая таблица выглядит не совсем правильно, так как это приведет к созданию избыточных данных. Альтернативная модель данных - создайте 3 таблицы с моделью данных, как показано ниже, для заполнения данных.

  1. Таблица 1

    ┌───────────────────┬──────────────┬─────────────────┐
    │ Table_Name        │ Model_Config │                 │
    ├───────────────────┼──────────────┼─────────────────┤
    │ Column_name       │ Data_type    │ Constraint      │
    ├───────────────────┼──────────────┼─────────────────┤
    │ Model_Id          │ number(5)    │ PK              │
    ├───────────────────┼──────────────┼─────────────────┤
    │ Model_Name        │ varchar2(50) │                 │
    └───────────────────┴──────────────┴─────────────────┘
    
  2. Таблица 2

    ┌───────────────────┬────────────────────────────────┐
    │ Table_Name        │ PartCategory_Config            │
    ├───────────────────┼──────────────┬─────────────────┤
    │ Column_name       │ Data_type    │ Constraint      │
    ├───────────────────┼──────────────┼─────────────────┤
    │ PartCategory_Id   │ number(5)    │ PK              │
    ├───────────────────┼──────────────┼─────────────────┤
    │ PartCategory_Name │ varchar2(50) │                 │
    └───────────────────┴──────────────┴─────────────────┘
    
  3. Таблица 3

    ┌───────────────────┬────────────────────────────────┐
    │ Table_Name        │ Model_partCategory_link        │
    ├───────────────────┼──────────────┬─────────────────┤
    │ Column_name       │ Data_type    │ Constraint      │
    ├───────────────────┼──────────────┼─────────────────┤
    │ Model_Id          │ number(5)    │                 │
    ├───────────────────┼──────────────┤                 │
    │ PartCategory_Id   │ number(5)    │  Composite_PK   │
    └───────────────────┴──────────────┴─────────────────┘
    

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

https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=c207dd2b71545ed787db0fb7ef65800a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...