2013-10-06 2 views
1

У меня есть две таблицы. Person и Phones. Многие номера телефонов могут быть связаны с одним человеком по внешнему ключу. Если я хочу добавить номер телефона и сопоставить его конкретному человеку, как должен выглядеть мой SQL?MSSQL вставляет строки в реляционные таблицы.

В моем понимании:

  1. SQL заявление должно быть Transact, поэтому сначала я должен вставить лицо в Person таблицу и после того, как вставить номер телефона в Phones и сопоставить его с только что вставленной строки в таблице Person.

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

Я ищу чистое и простое решение или sql-пример.

Примечание: У меня нет доступа для создания хранимых процедур.

+0

Если вы не можете создать хранимую процедуру, вам необходимо указать свое «клиентское программное обеспечение». DotNet, PHP, Java и т. Д. – granadaCoder

ответ

1

Если вы вставляя новый Person с новыми Phone с, то вы бы

  1. Вставить в Person таблицу.
  2. Используйте LAST_INSERT_ID(), чтобы получить идентификатор, который был только что сгенерирован на этой вставке.
  3. Используйте этот идентификатор, чтобы вставить записи в таблицу Phone.

Если вы вставляя новый Phone с для существующего Person, то вы бы

  1. Выберите Person, чтобы получить его идентификатор, если вы уже не имеете его
  2. Использование что ID для вставки записей в таблицу Phone.

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

Определение "уже существует" в этом контексте. Что определяет уникальность ваших данных? В таких случаях вы можете захотеть включить это определение уникальности в первичный ключ в этой таблице. (Который может состоять из более чем одного столбца.) В противном случае вам понадобится SELECT из таблицы, чтобы узнать, существует ли эта строка. Если да, обновите его. Если это не так, вставьте его. (Или, тем не менее, вы хотите обрабатывать уже существующие данные логически в своем домене.)

Имейте в виду, что в таких случаях легко выйти за борт с уникальностью. Например, у вас может возникнуть соблазн попытаться создать связь между многими из многих таблиц, чтобы избежать дублирования телефонных номеров. В сценариях реального мира это становится плохой идеей, потому что возможно:

  1. Два человека имеют один и тот же номер телефона.
  2. Один из этих двух человек меняет свой номер, а другой - нет.

В чрезмерно нормированной сценарии, указанные события приведут к одной из следующих причин:

  1. Обе пользователей телефоны обновляются, когда только один из них на самом деле обновляет его, в результате неверных данных для другого пользователя.
  2. Вы должны написать чрезмерно сложный код, чтобы проверить этот сценарий и создать новую запись (disassociating предыдущие отношения «многие ко многим»), в результате чего возникает много ненужного кода и точек отказа.
Смежные вопросы