Как создать связь "один ко многим" без использования промежуточной таблицы?

Как вы можете связать таблицу предметов с таблицей красок, если у каждого предмета есть две характеристики краски — внутренняя и наружная, и при этом вы хотите избежать использования промежуточных таблиц?
  • 26 марта 2025 г. 13:04
Ответы на вопрос 3
Чтобы создать связь "один ко многим" между таблицей предметов и таблицей красок без использования промежуточной таблицы, можно добавить в таблицу предметов два внешних ключа, которые будут ссылаться на одну и ту же таблицу красок. 

Вот как это можно сделать:

1. Создайте таблицу красок (допустим, она называется `Colors`):
    ```sql
    CREATE TABLE Colors (
        ColorID INT PRIMARY KEY,
        ColorName VARCHAR(50) NOT NULL
    );
    ```

2. Создайте таблицу предметов (допустим, она называется `Items`), добавив два внешних ключа для внутренней и наружной окраски:
    ```sql
    CREATE TABLE Items (
        ItemID INT PRIMARY KEY,
        ItemName VARCHAR(100) NOT NULL,
        InnerColorID INT,
        OuterColorID INT,
        FOREIGN KEY (InnerColorID) REFERENCES Colors(ColorID),
        FOREIGN KEY (OuterColorID) REFERENCES Colors(ColorID)
    );
    ```

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

Примеры данных:

- Таблица `Colors` может содержать записи:
    ```
    ColorID | ColorName
    ---------|-----------
    1       | Red
    2       | Blue
    3       | Green
    ```

- Таблица `Items` может выглядеть так:
    ```
    ItemID | ItemName  | InnerColorID | OuterColorID
    --------|------------|---------------|--------------
    1      | Chair      | 1             | 2
    2      | Table      | 2             | 3
    3      | Desk       | 3             | 1
    ```

С помощью такой структуры вы можете управлять окраской предметов без использования дополнительных промежуточных таблиц, сохраняя структурированность и целостность данных.
Не понятно в чем проблема? Что мешает два ForeignKey сделать и почему вдруг тут появится промежуточная таблица?
Каждый внешний ключ совершенно независим от других внешних ключей. Два внешних ключа на одну и ту же таблицу - вполне нормальная ситуация. 
И никаких дополнительных таблиц тут не требуется.
Похожие вопросы