sql server 2008 - Foreign key or link between part of column selection -
i have 3 tables in following setup
create table [dbo].[codevariable] ( [id] [int] null, [code] [nchar](10) null, [variable] [int] null ) on [primary] create table [dbo].[proxy] ( [id] [int] null, [description] [nvarchar](50) null, [status] [bit] null, [added] [datetime] null ) on [primary] create table [dbo].[wall] ( [id] [int] null, [description] [nvarchar](50) null ) on [primary]
following values in tables table wall
1 basic wall 2 medium wall 3 advanced wall
table proxy
1 small proxy true 2013-05-08 00:00:00.000 2 medium proxy false 2013-05-08 00:00:00.000
table codevariable
1 proxy 1 2 proxy 2 3 wall 1 4 wall 2 5 wall 3
owke issue facing, if want insert lets new line in proxy. have id 3, need make sure id 3 exists in codevariable under code proxy!
without foreign key there no check if code exists in code variable.
i have tried foreign keys without success. how can create link between codevariable table on columns code , variable towards table proxy , table wall.
i can created index on code , variable unique. u cannot link foreign key it.
i using sql 2008
thanks
one way change table definitions, foreign key
constraints can enforced.
use composite primary key (codeid, codetype)
table codevariable
(renamed code
), codetype
can take 2 possible values, either 'p'
or 'w'
.
(the code
had used instead of codetype
preferred narrower column keys (primary , foreign) used in indexes.
code
converted computed column):
create table [dbo].[code] ( [codeid] [int] not null, [codetype] [char](1) not null, [codename] -- computed column case codetype when 'p' 'proxy' when 'w' 'wall' end, constraint code_pk primary key (codeid, codetype), constraint codetype_ck check (codetype in ('p', 'w')) ) ;
in 2 other tables, codetype
added well, (codeid, codetype)
can defined both primary
, foreign
key:
create table [dbo].[proxy] ( [proxyid] [int] not null, [codetype] [char](1) not null default 'p', [description] [nvarchar](50) null, [status] [bit] null, [added] [datetime] null, constraint proxy_pk primary key (proxyid, codetype), constraint code_proxy_fk foreign key (proxyid, codetype) references code (codeid, codetype), constraint codetype_proxy_ck check (codetype = 'p') ) ; create table [dbo].[wall] ( [wallid] [int] not null, [codetype] [char](1) not null default 'w', [description] [nvarchar](50) null, constraint wall_pk primary key (wallid, codetype), constraint code_wall_fk foreign key (wallid, codetype) references code (codeid, codetype), constraint codetype_wall_ck check (codetype = 'w') ) ;
Comments
Post a Comment