Как спроектировать матрицу совместимости из 2 таблиц MySQL? - PullRequest
0 голосов
/ 30 сентября 2019

Я проектирую базу данных MySQL с таблицами для hardware и software. Я хотел бы, чтобы каждая запись в software включала в себя какие записи в hardware, с которыми она совместима.

Hardware:
| ID |
------
| 1  |
| 2  |
| 3  |

Software:
| ID | Compatible with HW1 | Compatible with HW2 | Compatible with HW3 |
------------------------------------------------------------------------
| 1  | 1                   | 0                   | 0                   |
| 2  | 1                   | 1                   | 0                   |
| 3  | 1                   | 1                   | 1                   |
| 4  | 1                   | 1                   | 1                   |
| 5  | 0                   | 1                   | 1                   |

Можно ли автоматически создавать столбцы в software из записей в hardware? И в идеале добавьте новый столбец к software, когда новая запись будет сделана к hardware?

1 Ответ

1 голос
/ 12 октября 2019
CREATE TABLE Compatibility (
    software_id SMALLINT UNSIGNED NOT NULL,
    hardware_id SMALLINT UNSIGNED NOT NULL,
    yes_no_maybe ENUM('unknown', 'no', 'yes', 'partial' UNSIGNED NOT NULL,
    notes TEXT,
    PRIMARY KEY(software_id, hardware_id),
    INDEX(hardware_id, software_id)
) ENGINE=InnoDB;

Вставьте строку для каждой пары «мягкая / жесткая», для которой у вас есть информация.

После этого, беспокойтесь о «развороте», чтобы получить вывод со многими столбцами.

...