2010-06-25 10 views
1

J'ai un certain nombre de tables qui seront recherchées en utilisant l'URL 'slug'. Par exemple, 'news' et 'blog' ont tous deux le champ 'slug', qui est défini comme un champ unique dans le schéma de la base de données de doctrine.Sql: Contrainte de champ unique (slug) sur plusieurs tables (doctrine/symfony)

Y a-t-il un moyen d'étendre cette unicité sur les deux tables: par exemple s'il y a un article avec slug = "good-story" alors ça échouera si j'essaye d'entrer ça comme slug pour un article de blog ?

Merci Tom

+0

Avez-vous trouvé la réponse que vous recherchiez? Si oui, pourriez-vous l'accepter s'il vous plaît? Si non, pourriez-vous préciser ce que vous cherchez toujours? Habituellement, plus vous fournissez d'informations, plus il est probable que quelqu'un puisse vous aider. – MaasSql

Répondre

2

Selon l'endroit où vous êtes en développement. Si vous maintenez l'application, alors je suis d'accord avec la suggestion de Bob Jarvis. On dirait un tas de code déconnecté.

Ce que vous décrivez est une entité qui appartient à sa propre table. Dans cet esprit, voici comment je pourrais le modéliser.

 

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

Pour autant que je suis conscient que vous ne pouvez pas avoir un contstraint UNIQUE qui couvre les tables. Une façon de le gérer serait d'avoir une table SLUG où le champ 'slug' serait la clé primaire. Vous auriez besoin des déclencheurs INSERT sur 'news' et 'blog' qui essaieraient d'insérer le nouveau 'slug' dans la table SLUG. Vous pouvez également mettre les déclencheurs UPDATE sur 'news' et 'blog' pour mettre à jour SLUG.slug si 'news.slug' ou 'blog.slug' a été mis à jour.

J'espère que cela aide.

Questions connexes