Положите «внешний ключ» на другой стол. Скажем, у вас есть 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
То, что вы ищете, называется «внешним ключом». – David
, и вам понадобится внешний ключ, так как @David сказал – SaggingRufus
@SaggingRufus его вид очевидной части соединения, что я спрашивал, как сделать соединение, плохо посмотрите, какой внешний ключ –