Хобрук: Ваш путь к мастерству в программировании

Как внешний ключ указывает на составленный первичный ключ?

У меня есть таблица Login, в которой есть поля для логина и пароля. Оба являются первичными ключами.

И у меня есть таблица символов. Какой логин может иметь много символов. Так как же работает внешний ключ?

Как создать внешний ключ внутри таблицы символов для входа в систему?

Должен ли я создать 2 поля в качестве внешних ключей внутри таблицы символов, чтобы указать на логин?

Спасибо!

17.04.2011

  • Почему login, password является составным первичным ключом, а не просто login? Может ли один login иметь несколько паролей? password не кажется достаточно стабильным, чтобы быть частью PK (IMO) 18.04.2011
  • Какой интерес иметь пароль Первичным ключом!? Что произойдет, если логин изменит пароль на другой, используемый другим тем же логином? Эта реализация БД кажется странной... 18.04.2011
  • Поле пароля не должно быть частью первичного ключа. Если и логин, и пароль являются частью первичного ключа, то пароль становится частью удостоверения учетной записи, а это плохо по многим причинам. Кроме того, это означает, что идентификаторы входа в систему не будут уникальными. 18.04.2011
  • Это отличный вопрос. Думаю, я ошибаюсь, хе-хе. Во всяком случае, я хотел бы знать, учитывая это право. Спасибо, я пересмотрю это. 18.04.2011
  • @Jeffrey L Whitledge: это означает, что идентификаторы входа в систему не будут уникальными в системе - доказательств этого не было. На самом деле было бы справедливым предположить, что login id действительно является ключом и что выбранный OP (возможно, неправильно выбранный) PK является суперключом. 19.04.2011

Ответы:


1

Используйте следующее в сценарии создания или изменения таблицы:

create table character (
  field1 varchar(30),
  ...,
  login varchar(12),
  password varchar(128),
  foreign key (login, password) references login (login, password)
)

Теперь, с учетом сказанного, кажется странным включать пароль в первичный ключ вашей таблицы входа. Я бы рекомендовал просто иметь первичный ключ в таблице входа или, возможно, даже суррогатный ключ (целочисленное удостоверение). Используя подход с включением логина и пароля, вы разрешите несколько регистраций под одним и тем же логином. Это может быть нормально, но кажется, что вы действительно можете создать ситуацию, когда один пользователь случайно создает несколько логинов. Кроме того, это затруднит восстановление утерянного пароля. Наконец, каждый раз, когда пароль меняется (а пользователь может изменить его в любое время), его нужно будет обновлять в каждом ссылающемся поле, что значительно усложнит смену пароля.

17.04.2011
  • Спасибо, но в случае, если моя стратегия верна (что не так), я все равно не понимаю, как работать в этой ситуации. Как добавить новый экземпляр (объект) в таблицу символов? Подскажите sql запрос, спасибо! 18.04.2011
  • @seva - ваша таблица символов должна содержать оба столбца (login, password) 18.04.2011
  • А, теперь я понимаю. Спасибо! это оно! 18.04.2011
  • Я обновил запрос, чтобы вы могли видеть, как это работает. Лично я большой поклонник естественных ключей и составных внешних ключей (когда ключевые поля стабильны и не меняются!), а не суррогатных ключей. Но в этом случае я действительно согласен с комментариями о том, что пароль, вероятно, не должен быть в ключе. Это определенно не стабильно, так как пользователь может изменить его по своему желанию. 18.04.2011
  • Новые материалы

    #093 | Моделирование вспышки эпидемии с помощью JavaScript — Часть 3
    TLDR: Я сделал симуляцию вспышки эпидемии, в которую можно поиграть здесь . Мой холст, моя сцена Мой HTML — это всего лишь один div с классом stage, и вот как я настроил на нем свой объект..

    numberToString.js (8kyu 16)
    Алгоритм кодовых войн Проблема Нам нужна функция, которая может преобразовать число в строку. 숫자를 문자열로 변환하는 함수를 작성해라. Решение 01 function numberToString(n) { return n.toString(); }..

    Лучшие практики для быстрого изучения языка программирования
    Изучение языка программирования может быть сложной задачей, но при правильном подходе определенно возможно быстро выучить язык программирования. Хорошее понимание языка программирования может..

    Использование данных из Adobe Analytics в предложениях Adobe Target
    Я уверен, что все видели эти всплывающие окна в интернет-магазинах, которые говорят что-то вроде « 15 человек просматривают этот товар прямо сейчас! » или « 105 человек из Мичигана купили это..

    Машинное обучение и его набор данных в CreateML
    Когда я впервые начал учиться в Apple Developer Academy, у меня был момент неуверенности в моем интересе к машинному обучению. Нужно ли мне сменить карьеру моей мечты с специалиста по данным на..

    Обучение требует воли
    Недавно я прочитал отличную статью Шейна Легга и Джоэла Венесса из DeepMind. http://arxiv.org/pdf/1109.5951v2.pdf В статье «универсальный интеллект» агента π определяется как: Поэтому..

    Безопасность по дизайну делает всех счастливыми
    Заложенная безопасность делает всех счастливыми Если вы никогда не смотрели Louis C.K. рассказать о том, как Все удивительно, и никто не счастлив ; побаловать себя. Сделайте это прямо..