Отношения сущности - PullRequest
       8

Отношения сущности

1 голос
/ 24 февраля 2009

Этот вопрос является продолжением другого вопроса, также озаглавленного Отношения между сущностями .

Дежен: вы должны перенести материал сюда в исходный вопрос, а затем удалить этот вопрос.


Разработка: Да, «Поле» относится к участкам земли. У нас есть несколько полей для выращивания тростника в разных местах. Это [каждое поле?] Названо и имеет бюджет.

Пользователь не имеет в виду человека, который работает на машине. Это отделы. Я использовал таблицу isDone, чтобы связать userDept с машиной. Машина может использоваться несколькими отделами, и многие машины могут работать для пользователя.

Конкретная машина может использоваться для нескольких задач в данную смену. Он может работать, скажем, 2 часа и может начать другое задание в другом поле. У нас есть три смены в день, каждый из 8 часов!

Если я использую Автоинкрементный ПК, вы думаете, что важны другие ключи? Я не предпочитаю использовать это!

Обычно я использую только один ключ автоинкремента в таблице. Как мы можем создать отношения, которые включают ключи автоинкремента? Спасибо за вдумчивый комментарий !!

Dejene

1 Ответ

1 голос
/ 24 февраля 2009

Отношения между таблицами («внешними ключами») определены между столбцами, а не значениями. Пример:

create table machine ( id identity );
create table owner ( id identity );
create table isDone ( machineId, ownerId );

Теперь вы можете сказать "isDone.machineId должно существовать в таблице machine":

ALTER TABLE isDone 
  ADD CONSTRAINT machineFK 
  FOREIGN KEY (machineId) 
  REFERENCES machine (id)
;

В результате база данных выдаст ошибку, если вы попытаетесь вставить строку в isDone со значением для столбца machineId, которого нет нигде в таблице machine (где select Count(*) from machine where id = machineId возвращает 0).

Таким образом, вы должны разделить время определения (где вы говорите, что является действительным, а что нет) и время, когда вы манипулируете данными в базе данных.

Когда вы используете эту функцию в своей базе данных, вы должны убедиться, что машина и владелец существуют в момент создания новой строки в isDone. Обычно это просто: каждый день появляются новые смены, но нет новых машин и отделов. Таким образом, вы можете создавать новые машины и отделы, когда они куплены / основаны. Первая смена с использованием одного из них, вероятно, произойдет очень долго после этого.

Что касается других ключей: столбец автоинкремента должен быть первичным ключом (PK) вашей таблицы и ничем иным. Позже вы можете создать индексы для другого столбца, если обнаружите, что некоторые запросы работают плохо. Но для начала должно быть достаточно колонки auto-inc PK. Это упрощает формирование ограничений внешнего ключа.

Пример. Если вы используете имя отдела в качестве первичного ключа, у вас могут возникнуть проблемы при изменении названия отдела.

Кроме того, я предлагаю вам использовать реальное имя объектов (например, «отдел» или «владелец» вместо «пользователь») в вашем дизайне. Это упростит просмотр того, что и что искать, когда вы что-то ищете.

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