Связать одну таблицу с другой? - PullRequest
0 голосов
/ 28 августа 2009

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

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

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

Ответы [ 2 ]

4 голосов
/ 28 августа 2009

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

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)
)
3 голосов
/ 28 августа 2009

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

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

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

PROGRAM_CATEGORIES_XREF

  • PROG_ID (pk, fk)
  • CATEGORY_ID (pk, fk)

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

...