Таблицы & PK / FK для реляционной базы данных - PullRequest
1 голос
/ 10 апреля 2019

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

это набор данных

Это то, что я думаю, что мне нужно сделать, но я не совсем уверен

Клиенты (Cust_no (PK), Order_no *, Cust_name, Телефон, Адрес, Город, Штат, Почтовый индекс, Страна)

Заказы (Order_no (PK), Cust_no *, Product_no, Количество, Unit_price, sales_rep)

Адреса (Cust_no * (PK), почтовый индекс (PK), адрес, город, штат,, страна)

Я буду создавать таблицы и вставлять данные в базу данных, что, я надеюсь, не должно быть проблемой, но сначала мне нужно прояснить отношения вместе с PK и FK

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Я бы удалил Order_no из таблицы Customer .Используя этот FK, клиент может ссылаться только на один заказ.Вместо этого используйте FK в таблице Orders .Таким образом, любое количество заказов может относиться к конкретному клиенту.

Аналогично, таблица Адреса , вероятно, должна иметь FK для ваших клиентов и не иметь столбца адресов в таблице ваших клиентов.(Лично я обычно предпочитаю просто добавлять адресные столбцы непосредственно в таблицу Customers .)

Кроме того, почему у вас есть отдельные столбцы адресов (город, штат и т. Д.) В обоих Клиенты и Адреса Таблица?И почему вы используете почтовый индекс в качестве FK?Это означает, что вы не можете иметь более одного клиента с одним и тем же почтовым индексом.

Вот как я бы подошел к нему (предполагая отдельную таблицу для адресов):

Клиенты:Id (PK), Имя, Телефон
Заказы: Id (PK), CustomerId (FK), ProductId, Количество, UnitPrice, SalesRep
Адреса: Id (PK), CustomerId (FK), Адрес, Город, Штат, Почтовый индекс, страна

0 голосов
/ 10 апреля 2019

Почти.Ваши заказы должны иметь Customer_ID, Address_ID.Клиенты не должны иметь OrderID FK.Customer> Orders 1> Many.

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

...