MS Access - обеспечение ссылочной целостности - ограничения внешнего ключа нескольких таблиц

Я создал четыре таблицы в MS Access, чтобы описать допустимые конфигурации личного противопожарного оборудования для использования в качестве части реестра активов. Подробности следуют:

TBL_1   :  FIRE_CLASSIFICATION
FIELDS  :   | PK | CLASS              |
---------------------------------------
ENTRIES :   | 1  | Fire Blanket       |
            | 2  | Fire Extinguisher  |
            | 3  | Fire Hose Reel     |

TBL_2   :  FIRE_TYPE
FIELDS  :   | PK | TYPE               | FK_CLASS           |
------------------------------------------------------------
ENTRIES :   | 1  | General            | Fire Blanket       |
            | 2  | Carbon Dioxide     | Fire Extinguisher  |
            | 3  | Foam               | Fire Extinguisher  |
            | 4  | Powder ABE         | Fire Extinguisher  |
            | 5  | Powder BE          | Fire Extinguisher  |
            | 6  | Vap. Liquid        | Fire Extinguisher  |
            | 7  | Water              | Fire Extinguisher  |
            | 8  | Wet Chemical       | Fire Extinguisher  |
            | 9  | General            | Fire Hose Reel     |

TBL_3   :  FIRE_SPECIFIC
FIELDS  :   | PK | SPECIFIC           | FK_CLASS           |
------------------------------------------------------------
ENTRIES :   | 1  | Dimensions         | Fire Blanket       |
            | 2  | Capacity (kg)      | Fire Extinguisher  |
            | 3  | Length (m)         | Fire Hose Reel     |

TBL_4   :  FIRE_OPTIONS
FIELDS  :   | PK | FK_CLASS           | FK_TYPE        | FK_SPECIFIC    | OPTION |    
----------------------------------------------------------------------------------
ENTRIES :   | 1  | Fire Extinguisher  | Carbon Dioxide | Capacity (kg)  | 2.0    |
            | 2  | Fire Extinguisher  | Carbon Dioxide | Capacity (kg)  | 3.5    |
            | 3  | Fire Extinguisher  | Carbon Dioxide | Capacity (kg)  | 5.0    |
            | 4  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 1.1    |
            | 5  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 2.1    |
            | 6  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 2.3    |
            | 7  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 2.7    |
            | 8  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 4.5    |
            | 9  | Fire Extinguisher  | Powder ABE     | Capacity (kg)  | 9.0    |
            | 10 | Fire Hose Reel     | General        | Length (m)     | 12.0   |
            ... CONTINUED

В настоящее время можно вставить записи, такие как

            | 11 | Fire Hose Reel     | Powder ABE     | Dimensions     | 1200 x 1200 |     

в таблицу FIRE_OPTIONS. Такое поведение очень нежелательно, так как эта запись не соответствует заявленным (допустимым) комбинациям, указанным в других таблицах.

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

Я попытался использовать "Инструменты базы данных"-"Отношения", однако мне не удалось "Обеспечить ссылочную целостность" между TBL_4 с TBL_1, TBL_2 и TBL_3 одновременно.

Я был бы очень признателен за любую помощь в этом вопросе.

** Редактировать

Я смог решить эту проблему путем внесения изменений в определения Первичного ключа. Это подробно описано ниже:

TBL_1 : FIRE_CLASSIFICATION
        PK: PK (Auto Increment)

TBL_2 : FIRE_TYPE
        PK: PK (Auto Increment) & FK_CLASS

TBL_3 : FIRE_SPECIFIC
        PK: PK (Auto Increment) & FK_CLASS

TBL_4 : FIRE_OPTIONS
        PK: PK (Auto Increment)

Затем я определил следующие отношения в функции "Инструменты базы данных"-"Отношения":

[ERI]    FIRE_CLASSIFICATION.PK (1)  ->  FIRE_TYPE.FK_CLASS (MANY)
[ERI]    FIRE_CLASSIFICATION.PK (1)  ->  FIRE_SPECIFIC.FK_CLASS (MANY)
[ERI] {  FIRE_CLASSIFICATION.PK (1)  ->  FIRE_OPTIONS.FK_CLASS (MANY)
         FIRE_TYPE.PK (1)            ->  FIRE_OPTIONS.FK_TYPE (MANY)
         FIRE_TYPE.FK_CLASS (1)      ->  FIRE_OPTIONS.FK_CLASS (MANY)
         FIRE_SPECIFIC.PK (1)        ->  FIRE_OPTIONS.FK_SPECIFIC (MANY)
         FIRE_SPECIFIC.FK_CLASS (1)  ->  FIRE_OPTIONS.FK_CLASS (MANY)    }

ERI : "Enforce Referential Integrity" Option Selected

1 ответ

В настоящий момент, поскольку между таблицами FIRE_CLASSIFICATION и FIRE_SPECIFIC существует взаимно-однозначное отношение, вы можете добавить столбец SPECIFIC в таблицу FIRE_CLASSIFICATION. Это может не сработать, если все станет сложнее.

Другие вопросы по тегам