Jawanaut Ответов: 1

Вопрос о реляционной базе данных


У меня есть конкретный, но простой вопрос. У меня есть три таблицы в моей базе данных SQL. Я хочу использовать первичный ключ в первом из них в качестве внешнего ключа в двух других. Вот тут-то я и столкнулся с проблемами.

Я сделал все три таблицы без проблем. В основном у меня есть companyData, contactData и repData. Я почти уверен,что это отношение один ко многим. Каждая компания может иметь контакт и несколько представителей. Представитель и контакт могут иметь только одну компанию.

Мой вопрос в том... даже если я свяжу таблицы вместе с "одним и тем же" первичным ключом, есть ли определенный способ извлечь данные из базы данных или он просто автоматически свяжет идентификатор представителя с идентификатором компании?

Что я уже пробовал:

Просто создание таблиц в базе данных и создание внешних ключей.

CHill60

Что вы подразумеваете под "извлечением данных из базы данных"? Вам нужно будет использовать соединение - какое именно, зависит от того, что вы пытаетесь запросить и откуда

0x01AA

Цитата: "каждая компания может иметь контакт и несколько представителей. Представитель и контакт могут иметь только одну компанию."

1. )" каждая компания может иметь контакт"
companyData contactData 1: 1 отношение

2.) " Каждая компания ... может иметь несколько представителей"
companyData repData 1: N отношение

- > Представитель и контакт не имеют прямого отношения

Мне кажется, нужно было еще кое-что объяснить.

1 Ответов

Рейтинг:
5

Peter Leow

Основываясь на вашем описании, есть по крайней мере три сущности, сначала четко укажите, что из этих сущностей на основе требований пользователя, например:
1. Что такое компания, ее цель и атрибуты данных?
2. Что такое контакт, его назначение и атрибуты данных?
3. Что такое представитель, его цель и атрибуты данных?
4. каковы отношения между ними, если таковые имеются?
Используйте диаграмму для представления точек 1-4.
Используйте это как ссылку Введение в проектирование баз данных[^]


CPallini

5.

Peter Leow

Спасибо, Кпаллини.

Jawanaut

Спасибо за ответ. Это было очень информативно. К сожалению, это поставило меня перед новой проблемой. При попытке создать ограничения для отношений поле не будет отправлено в базу данных. Вместо этого я получаю ошибку с ограничениями.

Я чувствую, что, возможно, неправильно все устроил. Эта ссылка давала примеры по-другому. Это больше похоже на диаграмму EER, чем на SQL. В любом случае, я не использую ни то, ни другое. Я использую " ограничение внешнего ключа phpAdmin (INNODB)".

Каждая таблица имеет свой идентификатор. Поскольку два могут быть в одном, но не связаны друг с другом, я сделал столбец как в repData, так и в contactData под названием companyID и сделал его реляционным к companyID в таблице companyData.

Теперь просто интересно, делаю ли я это задом наперед... или совершенно неправильно? Я действительно ценю все, что вы (и все) предложили мне до сих пор.

Peter Leow

Целью ограничения внешнего ключа является обеспечение соблюдения правила ссылочной целостности базы данных. Это включает в себя запрет на использование значения внешнего ключа в дочерних таблицах (rep и contact) без его первого существования в качестве значения первичного ключа в родительской таблице (company).