2012-05-25 4 views
0

По причинам, которые я не могу понять, люди, которые поставляют мои таблицы, не имеют уникальной идентификации одного поля для записей 20k + в своих таблицах.Первичный ключ Multi-Field

У меня есть два поля, BuildingCode и RoomCode, которые вместе составляют уникальную комнату. Например:

BuildingCode RoomCode OtherInfo 
001    100A  This is room 100 A in building 1 
001    101   Different room in the same building 
002    100A  This is still unique, even though two 100As exist 

Я знаю, что я могу сказать, доступ к индексу обоих этих полей под одной «MainIndex» и не убедиться в отсутствии дубликатов. То, что я не знаю, как сделать, - это позволить другой таблице ссылаться на одну из этих комнат в качестве ее родительской (от одного до многих отношений).

В таблице «Мои компьютеры» я хочу обратиться к одной конкретной комнате. То есть, я хочу убедиться, что RoomRef является ссылкой на одну уникальную комнату. Как я могу это сделать?

ComputerSN  RoomRef 
ABC123   001-100A 
ABC124   002-100A 

Я не могу изменить макет данных таблиц номер из-за их пути осуществления обновления данных (в таблицах номеров).

Любая помощь, очевидно, ценится!

+0

Есть ли причина, по которой вы не хотите использовать запрос? Есть ли причина, почему поиск не должен выполняться в форме? Поисковые поля в таблицах - это не очень хорошая идея. – Fionnuala

+0

Я подумал об этом, но как бы я мог убедиться, что смогу сослаться на нужную комнату, если понадобится, скажите «Выберите все номера, в которых есть менее 2 компьютеров»? – StuckAtWork

+0

Позвольте мне перефразировать вопрос ... – StuckAtWork

ответ

0

Номер ref должен состоять из двух полей, соответствующих данным. Тогда достаточно просто присоединиться к запросу. Например

SELECT DataTable.BuildingCode, DataTable.RoomCode, Count(DataTable.RoomCode) 
FROM DataTable 
INNER JOIN LookUpTable 
ON DataTable.BuildingCode = LookUpTable.BuildingCode 
AND DataTable.RoomCode= LookUpTable.RoomCode 
GROUP BY DataTable.BuildingCode, DataTable.RoomCode 

Или там о.

+0

IF (большой, если) Я следовал за этим правом, это означает, что вы хотите, чтобы я использовал таблицу отношений? Или вы говорите, что у меня должно быть два поля в моей таблице компьютеров; один для здания и один для комнаты, затем используйте запросы для выбора «компьютеры, которые находятся в комнате X и здании Y»? – StuckAtWork

+1

У вас должно быть два поля в таблице ваших компьютеров и любая другая таблица, которая должна соответствовать данным. Есть преимущества в наличии двух полей. У вас может быть уникальный индекс на вашей компьютерной таблице Building Code + Room Code + Computer ID, чтобы ссылаться на уникальный код Building Code + Room Code для таблицы данных. – Fionnuala

+0

Спасибо. Я думаю, этого будет достаточно. – StuckAtWork

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