Sql: уникальное полевое противопоставление (слизняк) для нескольких таблиц (доктрина / symfony) - PullRequest
2 голосов
/ 25 июня 2010

У меня есть несколько таблиц, которые будут просматриваться с помощью URL 'slug'. Например, у 'news' и 'blog' есть поле 'slug', которое определяется как уникальное поле в схеме базы данных доктрины.

Можно ли как-нибудь распространить эту уникальность на обе таблицы: например, если есть новостная статья с slug = "good-story", то произойдет сбой, если я попытаюсь ввести ее как слаг для статьи блога?

Спасибо Том

Ответы [ 2 ]

2 голосов
/ 26 июня 2010

В зависимости от того, где вы находитесь в разработке.Если вы поддерживаете приложение, то я согласен с предложением Боба Джарвиса.Похоже на кучу несвязанного кода.

То, что вы описываете, является сущностью, которая принадлежит его собственной таблице.Имея это в виду, вот как я мог бы смоделировать это.


tbl_slug
--------------------
slug
slug_type
-primary key ( slug, slug_type )
-constraint - slug is unique to table


tbl_news
--------------------
id
fk_slug_slug
fk_slug_type
-constraint - fk_slug_type = 'news'


tbl_blog
--------------------
id
fk_slug_slug
fk_slug_type
-constraint - fk_slug_type = 'blog'

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

Насколько я знаю, у вас не может быть УНИКАЛЬНОЙ контрастрейты, которая охватывает таблицы. Один из способов справиться с этим - иметь таблицу SLUG, в которой поле 'slug' будет первичным ключом. Вам понадобятся триггеры INSERT для «news» и «blog», которые будут пытаться вставить новый «slug» в таблицу SLUG. Вы также можете установить триггеры UPDATE для «новостей» и «блога» для обновления SLUG.slug, если «news.slug» или «blog.slug» были обновлены.

Надеюсь, это поможет.

...