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. Это может не сработать, если все станет сложнее.