2014-09-04 2 views
0

Я создал четыре таблицы в 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 одновременно.

Буду признателен за любую помощь в решении этой проблемы.

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

Я был в состоянии решить эту проблему путем внесения изменений в Primary Key определений. Это подробно описано ниже:

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 

ответ

0

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