SQL/ACCESS односторонняя целостность данных отношения "один к одному"

У меня есть БД, которая сейчас содержит две таблицы:

  • Пользователи: включает данные, загруженные из CSV.
  • Учетные записи: учетная запись, открытая для определенного пользователя.

Обе таблицы имеют поле числового идентификатора (UserID, AccountID), поскольку в таблице Accounts также есть поле UserID для связи этих двух таблиц вместе.

Я хочу соединить эти две таблицы, чтобы убедиться, что новые записи в учетных записях могут быть добавлены только в том случае, если у них есть соответствующий вставленный идентификатор пользователя, который находится в таблице пользователей. Сначала это звучало для меня как связь один к одному. Однако, хотя не может быть учетной записи пользователя, которого нет в таблице «Пользователи», большинство записей в «Пользователи» по-прежнему не имеют учетной записи в таблице «Учетные записи».

Есть ли способ обеспечить целостность данных об этих отношениях в ACCESS/SQL?


person user8211163    schedule 21.04.2021    source источник
comment
Вы гуглили внешний ключ MS Access?   -  person jarlh    schedule 21.04.2021
comment
Да, можно установить отношения для обеспечения реляционной целостности, поэтому записи в учетных записях должны иметь родительскую запись в пользователях. Однако, чтобы предотвратить использование нескольких учетных записей для пользователя, необходимо установить «внешний ключ» UserID в учетных записях в качестве первичного ключа. Тогда не имейте AccountID в Users. Почему это не одна таблица?   -  person June7    schedule 21.04.2021


Ответы (1)


Да, вы можете использовать ForeignKeys. После создания таблицы «Пользователи» с идентификатором пользователя в качестве первичного ключа при создании таблицы «Учетные записи» с идентификатором учетной записи в качестве первичного ключа необходимо добавить идентификатор пользователя в качестве внешнего ключа и со ссылкой на идентификатор пользователя из таблицы «Пользователи».

  FOREIGN KEY (userID) REFERENCES Users(UserID)
person Dicsok Gabriel    schedule 21.04.2021
comment
Спасибо за ваш комментарий. Если я правильно понял, этот внешний ключ гарантирует, что я не смогу добавить учетную запись с недопустимым идентификатором пользователя. Однако, поскольку оба поля проиндексированы без дубликатов, я не могу заставить их работать иначе, чем один к одному, что снова дает сбой. Я хочу разрешить возможность связывания между таблицами, а также убедиться, что нигде нет более одного UsedID или AccountID. - person user8211163; 22.04.2021
comment
Почему один к одному терпит неудачу? Кажется, это то, что вы хотите. Установите оба поля UserID в качестве первичного ключа - это отношение один к одному. Затем установите UserID и AccountID в учетных записях в качестве составного индекса, чтобы предотвратить дублирование пар. И AccountID не должен быть в Users. Для предотвращения дублирования номера счета, скорее всего, потребуется код для проверки. Даже если бы это была одна таблица (почему бы и нет?), вероятно, потребовался бы некоторый код проверки. - person June7; 22.04.2021
comment
@user8211163 Хорошо, я создал для вас базу данных с примером, который вы можете использовать drive.google .com/drive/folders/ вот ссылка для скачивания. В этом примере я создал две таблицы: Пользователи с идентификатором пользователя в качестве первичного ключа и учетные записи с идентификатором учетной записи в качестве первичного ключа, плюс я добавил переменную с именем userID в учетных записях, которая будет моим иностранным ключом, а не первичным ключом здесь, в учетных записях. Наконец, я установил связь между пользователями (идентификатор пользователя) и учетными записями (идентификатор пользователя). - person Dicsok Gabriel; 22.04.2021