2009-08-28 2 views
0

я пытаюсь настроить некоторые таблицы в моем сервере SQL Express, и я хочу сделать что-то эффект этого:Ссылка на один стол на другой?

create table programs (
    progid int primary key identity(1,1), 
    name nvarchar(255), 
    description nvarchar(500), 
    iconFile nvarchar(255), 
    installScript nvarchar(255) 
) 

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

ответ

4

Создать еще одну таблицу для категорий, как это:

create table categories(
    catid int not null primary key identity, 
    caterogy varchar(255) not null 
) 

затем хранят категории, относящиеся к программе с помощью третьей таблицы:

create table progcategory(
    progid int foreign key references programs(progid) not null, 
    catid int foreign key references categories(catid) not null, 
    primary key(progid, catid) 
) 
+0

Я был только о том, чтобы спросить, где рк был =) –

+0

Если я понимаете это тогда, каждая программа может быть только в одной категории? – RCIX

+0

@RCIX: Нет, pk является составным ключом. Это означает, что для данной категории может быть только одна комбинация данной программы. Другими словами, это мешает кому-то ассоциировать «банан» с конкретной программой более одного раза. –

3

Сначала определите таблицу (если вы еще этого не сделали), чтобы содержать список категорий с столбцами id и value как минимум.

Может ли программа быть связана только с одной категорией? Если да, добавьте столбец в таблицу PROGRAMS и создайте ссылку внешнего ключа между столбцом категории в PROGRAMS в столбец id в таблице CATEGORIES.

Если вы хотите, чтобы иметь возможность связать один или несколько категорий, к программе, вам потребуется дополнительная таблица:

PROGRAM_CATEGORIES_XREF:

  • PROG_ID (рк, Ф.К.)
  • CATEGORY_ID (pk, fk)

В этом случае вам не нужно будет добавлять столбец в таблицу PROGRAMS из-за ссылки между столбцами PROG_ID.

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