2012-03-06 3 views
0

У меня есть таблица с именем USERS с user_id в качестве первичного ключа и user_name.Sql простая операция начинающего

У меня есть другая таблица USERS_ACT с user_act_id первичный ключ, user_act_user_id и еще 2 столбца.

Мне нужно user_act_user_id быть иностранным ключом в USERS? Как я могу это достичь?

Это мой первый день в SQL, поэтому, пожалуйста, будьте добры, чтобы объяснить, если то, что я прошу, неверно.

+0

Что ваш дб двигатель? – silly

+0

mysql и я использую dbvisualizer для работы с ним. – Fofole

ответ

1

давайте предположим, что вы не DB администратора, и вы просто хотите получить имена всех активных пользователей;))

select users.user_name 
from users 
join users_act on users.user_id = users_act.user_act_user_id 
+0

Это на самом деле то, что мне нужно. – Fofole

1

Без референциальной целостности вам решать, чтобы это работало, вокруг не было «волшебства».

Заполните свой user_act_user_id с помощью pk-значения от ПОЛЬЗОВАТЕЛЕЙ, и у вас оно есть.

Вы можете добавить ограничения, но это не может быть то, что вы просите, http://msdn.microsoft.com/en-us/library/ms175464.aspx

Короче говоря, они держат ключи между таблицами в хорошей форме.

+0

, так что bassicaly у моего user_act_user_id будут значения, которые также находятся в user_id от пользователей, так что это мой FK? – Fofole

+0

Да. Ты босс. – Teson

1

Это зависит от типа БД, если MySql даже поддерживает внешние ключи. Например, вы можете использовать внешние ключи с форматом InnoDB, но не в формате MyIsam. При работе с MySql я лично предпочитаю работать с MyIsam и выполнять большую часть проверки целостности во время программирования. В общем, вы можете просто добавить user_act_user_id в свой стол USERS, но не пометить его как любой ключ. После этого вы можете просто использовать JOIN, но из-за того, что референциальная целостность не указана, вам нужно написать свой собственный «триггер» на сайте программирования, если вы хотите f.e. для автоматического удаления данных, принадлежащих пользователю в другой таблице. В противном случае вы должны использовать ограничения или триггеры, но это может быть не так просто, когда вы только начинаете с SQL.

+0

Я прибегал к «триггеру» в качестве проверки на сайте программирования не на сайте db, если бы это было пропущено. – Chris

+0

+1 за попытку помочь – Fofole

+0

@Chriss: ОК. К сожалению, я не могу отменить мой downvote (если вы не отредактируете свой ответ). Хотя я по-прежнему считаю, что ссылочная целостность всегда должна быть проверена в базе данных. –

1

Предполагая, что вы используете InnoDB (который является единственным двигателем, который поддерживает внешние ключи):

ALTER TABLE users_act 
    ADD CONSTRAINT fk_users_act_users 
     FOREIGN KEY (user_act_user_id) 
     REFERENCES users (user_id); 
Смежные вопросы