2017-02-14 3 views
-2

Я не уверен, как задать этот вопрос, поэтому я не мог на самом деле Google, но я уверен, что есть простой ответ на этот вопрос.Как связать таблицу пользователей с другой таблицей

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

+0

То, что вы ищете, называется «внешним ключом». – David

+0

, и вам понадобится внешний ключ, так как @David сказал – SaggingRufus

+0

@SaggingRufus его вид очевидной части соединения, что я спрашивал, как сделать соединение, плохо посмотрите, какой внешний ключ –

ответ

1

Положите «внешний ключ» на другой стол. Скажем, у вас есть Users стол:

Users 
---------- 
ID (int, PK) 
Name (varchar) 
etc. 

Затем в другой таблице вы бы иметь столбец, который указывает обратно на эту таблицу:

Widgets 
---------- 
ID (int, PK) 
UserID (int, FK) <-- this is the foreign key 
etc. 

Синтаксис как вы создаете, что иностранные отношения ключ будет зависит от базы данных, которую вы используете, это будет в документации. Для такого внешнего ключа существует множество вариантов, но главное, что он поддерживает реляционную целостность данных. Поэтому, если вы попытаетесь вставить запись в Widgets с недопустимым UserID, тогда она выдает ошибку, потому что для связи данных должно быть сопоставление ID в Users.

После того, как эта связь находится в месте, запрашивая данные просто:

SELECT * FROM Users 
INNER JOIN Widgets 
    ON Users.ID = Widgets.UserID 

Edit: Основываясь на комментарий ниже, это звучит, как вы ищете «многие ко многим "отношений. Та же концепция, все, что вам нужно, это промежуточная таблица для их подключения. Что-то вроде этого:

Users 
---------- 
ID (int, PK) 
Name (varchar) 
etc. 

Widgets 
---------- 
ID (int, PK) 
etc. 

UserWidgets 
---------- 
ID (int, PK) <-- optional, the PK could be a composite of the FKs 
UserID (int, FK) 
WidgetID (int, FK) 

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

Запросы просто еще один присоединиться:

SELECT * FROM Users 
INNER JOIN UserWidgets 
    ON Users.ID = UserWidgets.UserID 
INNER JOIN Widgets 
    ON UserWidgets.WidgetID = Widgets.ID 
+0

да, но виджет может быть связан с более чем одним пользователем, как я могу это достичь? –

+0

@ pato.llaguno: Это отличается от того, что было указано. Что это за отношения? Может ли у пользователя много виджетов, а у виджета много пользователей? – David

+0

есть, это в оба конца –

0

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

Для примера В случае EMP (MANY) и DEPT (ONE) [В одном отделении много сотрудников] вы должны поместить DEPT_ID (который идентифицирует строку отдела в таблице DEPT) в качестве внешнего ключа в таблице EMP.

Вы можете применить аналогичное решение для своего прецедента.

Смежные вопросы