Access 2007 одно-двух столбцов ссылочной целостности - PullRequest
1 голос
/ 12 ноября 2009

Настройка:
Одна таблица называется documents со столбцами author_id и reviewer_id (среди прочих).
Одна таблица называется users с колонкой user_id.

Мне нужно создать две ссылки на ссылочную целостность:
Один-ко-многим от user_id до author_id.
Один-ко-многим между user_id и reviewer_id.

Другими словами, эти два столбца в documents не зависят друг от друга, но оба должны иметь допустимое значение user_id.

Добавление любого из этих отношений работает нормально. Когда я пытаюсь добавить второе отношение в окне Edit Relationships, Access жалуется на следующее сообщение:

Microsoft Office Access не может обеспечить ссылочную целостность для этих отношений.

Я искал, но не смог найти никаких решений для этого. Любые идеи о том, как эти отношения могут быть настроены?

Ответы [ 3 ]

6 голосов
/ 13 ноября 2009

Чтобы добавить два отдельных отношения из одной таблицы в два разных поля в другом, вам нужно иметь несколько экземпляров родительской таблицы в окне отношений.

Итак, вы добавили бы свою таблицу «Пользователи и документы» в окно отношений и создали первую связь. Затем добавьте таблицу «Пользователи» в окно отношений во второй раз (она будет иметь псевдоним «Пользователи»), а затем добавьте второе отношение из этой псевдонима.

Это полностью согласуется с тем же способом, которым вы определяете два таких объединения в QBE, поэтому я бы сказал, что это совсем не проблема. Но это не обязательно очевидно!

1 голос
/ 13 ноября 2009

Это не прямой ответ на ваш вопрос, но на вашем месте я бы использовал другую модель данных для реализации сложного отношения «многие ко многим» между Documents и Users, создав третью таблицу с именем * 1003. * со следующими полями:

PK  documentUser_id (*)
FK  document_id
FK  user_id
    documentUser_type

(*) or you could alternatively use document_id + user_id as a PK... 

Поле documentUser_type будет содержать тип отношения, т. Е. «Пользователь», «рецензент» и т. Д. Используя эту модель, вы можете иметь для одной книги нескольких пользователей и / или нескольких рецензентов, которые могут быть ближе реальность. Вы могли бы даже иметь другие типы отношений, такие как «автор» и т. Д.

0 голосов
/ 13 ноября 2009

Во-первых, я предлагаю вам изменить имена столбцов на author_user_id и reviewer_user_id соответственно, чтобы было ясно, что каждая ссылка user_id.

Во-вторых, вы должны знать, что использование инструментов пользовательского интерфейса Access не является обязательным. Многие из нас считают их не интуитивными, но, к счастью, есть альтернативы. Одним из них является использование SQL DDL, например. Режим запросов ANSI-92 :

ALTER TABLE Documents ADD 
   CONSTRAINT fk__ document_author_user_id__Users
   FOREIGN KEY (author_user_id)
   REFERENCES Users (user_id)
   ON DELETE NO ACTION
   ON UPDATE NO ACTION
;

ALTER TABLE Documents ADD 
   CONSTRAINT fk__ reviewer_user_id__Users
   FOREIGN KEY (reviewer_user_id)
   REFERENCES Users (user_id)
   ON DELETE NO ACTION
   ON UPDATE NO ACTION
;

В-третьих, учтите, что вам может потребоваться ограничение CHECK (или Правило валидации таблицы [sic]), чтобы пользователь не мог просмотреть свою работу, например

ALTER TABLE Documents ADD 
   CONSTRAINT document_author_cannot_review_their_own_work
   CHECK (author_user_id <> reviewer_user_id)
;
...