Вопрос о вставке данных в часть таблицы отношения 1: m - PullRequest
0 голосов
/ 15 апреля 2009

При вставке записей в таблицу базы данных, которая имеет отношение 1: m к другой таблице, разве не рекомендуется, чтобы соответствующая таблица обновлялась (вставлялась) новой записью? Есть ли какие-либо последствия, если обновится только одна из связанных таблиц?

Кроме того, если я обновлю таблицу со стороны m отношения (например, отношения автомобилей и колес, когда один автомобиль может иметь много колес, но колесо может принадлежать только одному автомобилю), я должен всегда вставлять внешний ключ как явный параметр? Например. если другая связанная таблица имеет систему PK 1, 2, 3, 4, 5 и идет вверх уникальным способом, я должен просто вставить значение внешнего ключа как значение через хранимую процедуру?

РЕДАКТИРОВАТЬ: Это звучит очень по-нюшно, но, к сожалению, я только изучал / изучал проектирование баз данных и Sql Server, в частности, из собственной практики (без формального обучения).

Ответы [ 2 ]

1 голос
/ 15 апреля 2009

Давайте использовать ваш пример ..

car:
    car_id
    name

wheel:
    wheel_id
    car_id

Если ваш первый вопрос спрашивает, должны ли вы обеспечить наличие соответствующей строки в таблице car при вставке записи в таблицу wheel, тогда да! В действительности, если ваша СУБД настроена правильно с внешними ключами, вы не сможете вставить строку в таблицу wheel без родительской строки в car.

Я думаю, что это может ответить и на ваш второй вопрос. Если нет, не могли бы вы уточнить?

0 голосов
/ 15 апреля 2009

Если у вас есть отношение один ко многим, вы должны сначала вставить запись в родительскую таблицу. Во время вставки в родительскую таблицу вам может понадобиться или не потребоваться вставка в дочернюю таблицу (таблицы). Это полностью зависит от вашего дизайна и того, какая информация доступна на момент вставки исходной записи. Например, клиенты и заказы имеют отношения один ко многим. Но клиент может быть добавлен до того, как он или она действительно что-нибудь купит, и, следовательно, не будет заказов. Или новый клиент может пытаться что-то купить, и ему нужно будет хранить как свою информацию о клиенте, так и свой заказ. ВАМ следует установить связь между предварительным ключом и внешним ключом во время настройки структуры базы данных. Это гарантирует, что у вас никогда не будет заказа без ассоциированного клиента. В таблице Order вы бы добавили столбец для полей идентификаторов из таблицы Customer. Когда вы вставляете запись, это значение будет частью вставки, как и другая информация.

Если вы обновляете родительскую или дочернюю таблицу, вам не нужно обновлять другую таблицу, если вы не измените поле, имеющее отношение PK.FK. Лучше, если вы никогда не измените это значение (Первичные ключи должны быть такими, чтобы их почти никогда не приходилось связывать. Если вы используете что-то, например, имя, для своего первичного ключа, вам необходимо переосмыслить свой дизайн.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...