Member 13591382 Ответов: 1

Как мне нравятся три SQL - таблицы вместе (2 таблицы для подключения к 1)


У меня есть три таблицы - пользователи, детали и система. Пользователь может сделать заказ, и информация хранится в разделе "детали" и "система", первоначально я связал эту информацию вместе следующим образом:

SELECT users.user_id, users.user_email, system.date, system.time, 
   system.table_layout, details.party_size, details.children_no, 
         details.diets, 
      details.occassion, details.more
      FROM users
    Join system  on users.user_id = system.id
    Join details on system.id = details.ID
ORDER BY users.user_id

Но потом я понял, что один пользователь может сделать несколько бронирований, однако идентификатор в "системе" и "деталях" будет иметь другой идентификационный номер и больше не будет соответствовать оригинальному идентификатору пользователя. Как мне решить эту проблему? Я попытался добавить новые столбцы в таблицы "системы" и "сведения", создав столбец под названием "customer_id", чтобы связать user.id к нему. Однако это не сработало, так как он продолжал показывать результат "0", и мне пришлось бы вручную вводить идентификатор пользователя.

Может ли кто - нибудь помочь мне связать эти три таблицы вместе под одним пользователем? Спасибо

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

гугл
ютуб
stackquestions
кодирование людей
- ничего!!!!!!!!!!!

Maciej Los

Пожалуйста, улучшите questaion, добавив примеры данных.

EZW

Похоже, что база данных была плохо спланирована и нуждается в перепроектировании

1 Ответов

Рейтинг:
1

OriginalGriff

Это не имеет большого смысла - почему ваш системный идентификатор и идентификатор ваших данных должны быть одинаковыми? Это означает, что каждая строка в вашей системной таблице имеет одну соответствующую строку в вашей таблице сведений, что фактически означает, что они являются одной и той же таблицей!
Я не знаю точно, чего вы пытаетесь достичь - и ваш вопрос совсем не проясняет этого, - но я подозреваю, что вам нужно вернуться на этап назад и снова взглянуть на ваши требования к данным, чтобы перепроектировать вашу базу данных.

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

ID            Primary key, probably IDENTITY or GUID
Description
Price
Клиенты
ID            Primary key, probably IDENTITY or GUID
CustName
Address
Счета-фактуры
ID            Primary key, probably IDENTITY or GUID
InvoiceNo     
InvoiceDate
terms
CustID        Foreign key to Customers.ID
InvoiceItems
ID            Primary key, probably IDENTITY or GUID
InvoiceID     Foreign key to Invoices.ID
ItemID        Foreign key to Items.ID

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

В этом есть смысл?