Правильна ли эта таблица поиска (ассоциации)? (отношения многие ко многим) - PullRequest
3 голосов
/ 24 июня 2010
CREATE TABLE jokecategory (
  jokeid INT NOT NULL,
  categoryid INT NOT NULL,
  PRIMARY KEY (jokeid, categoryid)
) DEFAULT CHARACTER SET utf8;

особенно ПЕРВИЧНЫЙ КЛЮЧ (шутка, categoryid)? или есть лучший способ написать это?

Спасибо заранее; -)

Ответы [ 3 ]

4 голосов
/ 24 июня 2010

Да, это очень хорошая таблица и первичный ключ (я мог бы назвать это таблицей «ассоциации», но я бы не назвал ее таблицей «поиска»).настаивать на том, чтобы в качестве первичного ключа использовался столбец суррогатного ключа jokecategoryid;если вы делаете это, вам все еще нужно УНИКАЛЬНОЕ ограничение (jokeid, categoryid) для обеспечения соблюдения бизнес-правила.

0 голосов
/ 25 июня 2010

Да, это очень хороший стол, как уже указывал Тони.Но я не вижу необходимости создавать его как обычную таблицу кучи с индексом первичного ключа.Это две структуры хранения.Подойдет только структура индекса, поэтому я советую создать эту таблицу в виде таблицы с индексами.

Вот ссылка на документацию: http://download.oracle.com/docs/cd/E11882_01/server.112/e10713/indexiot.htm#CNCPT911

С уважением, Роб.

0 голосов
/ 25 июня 2010

Я ожидаю, что таблица будет иметь два внешних ключа, например

CREATE TABLE jokecategory (
  jokeid INT NOT NULL REFERENCES joke (jokeid), 
  categoryid INT NOT NULL REFERENCES category (categoryid), 
  PRIMARY KEY (jokeid, categoryid)
) DEFAULT CHARACTER SET utf8;
...