J'ai deux tables:CONTRAINTE UNIQUE sur une colonne de la table étrangère dans SQL Server 2008
create table [dbo].[Main]
(
[ID] [int] identity(1,1) primary key not null,
[No] [int] not null,
[Sign] [char](1) not null
)
create table [dbo].[Names]
(
[ID_Main][int] primary key not null,
[Name][nvarchar](128) not null,
constraint [FK_Main_Users] foreign key ([ID_Main]) references [dbo].[Main]([ID]),
constraint [CK_Name] unique ([Name], [Sign])
)
Le problème est avec la deuxième contrainte CK_Name
Y at-il un moyen de faire une colonne cible de contrainte de une table étrangère?
EDIT:
Explication. J'utilise ces tables dans une application Silverlight en utilisant EntityFramework. Les entités sont créées par le tableau par héritage de type de sorte que le code est quelque chose comme ceci:
public abstract class Main
{
// main properties
}
public class Names : Main
{
// names properties
}
Cela me force à ne pas utiliser des vues SQL.
Données d'échantillon.
--------------------------------------------- | Main | Names | --------------------------------------------- | ID | Sign | No | ID_Main | Name | --------------------------------------------- | 1 | A | 1 | 1 | 'qwe' | | 2 | B | 1 | 2 | 'qwe' | | 3 | B | 1 | 3 | 'qwe' | | 4 | C | 1 | 4 | 'qwe' | | 5 | A | 2 | 5 | 'asd' | | 6 | B | 2 | 6 | 'asd' | | 7 | B | 2 | 7 | 'asd' | | 8 | C | 2 | 8 | 'asd' |
Comme vous pouvez le voir, il y a quelques lignes avec le même nom mais avec des signes. Il ne peut pas y avoir de nom non unique avec le même signe.
Je voudrais faire valoir qu'il n'y a qu'un seul nom avec signe = A et un seul nom avec l'écriteau C mais beaucoup de noms avec le signe = B
Pourquoi? – LukLed
Compte tenu des informations supplémentaires que vous avez fournies, j'aimerais en savoir plus sur les raisons pour lesquelles vous souhaitez cette restriction. Quelles entités représentent 'Main' et' Names'? Compte tenu de l'exemple de sortie, la table 'Names' ressemble à une table intermédiaire, sauf que' ID_Main' est un PK, donc il est réellement appliqué en tant que relation 1: 1. Quelles sont les règles par lesquelles il est déterminé qu'un signe ne peut avoir qu'un nom mais qu'un autre signe peut avoir plusieurs noms? – Thomas
Presque toutes les tables de mon système ont plusieurs colonnes communes. Je les ai donc placées dans une table principale et d'autres tables s'y réfèrent. Oui, il semble être une relation 1: 1, mais une autre logique en fait un 1: * mais pas directement – bodziec