如何建立一个表

问题描述:

两列之间的关系,我想建立列之间(和程序代码的测试代码)在相同表一比一的关系。我希望具有相同测试代码的所有测试具有相同的程序代码。如何建立一个表

  1. 我的第一个想法是使用UDF来查找相同测试代码对应于两个不同程序的情况。我了解到,这是行不通的,因为T-SQL只INSERTS后检查在检查约束的UDF - 不经过UPDATES why is t-sql allowing me to violate a check constraint that uses a UDP?

  2. 我的下一个念头,就是逻辑从UDF移动到检查约束自己。但是t-sql是说在检查约束中不允许使用子查询。这也意味着我不能使用EXISTS语法(我认为它也使用子查询)。

    ALTER TABLE [dbo].[mytable] WITH CHECK ADD CONSTRAINT [oneProgramPerTest] CHECK
    ( (select COUNT(*) from mydb.dbo.mytable u1 inner join mydb.dbo.mytable u2 on u1.testcode=u2.testcode and u1.progcode <> u2.progcode )=0 )

除非有一些方法来执行不具有(1)一个UDF或该逻辑(2)的子查询然后好像我需要创建的程序代码的“虚设”表和然后在myTable的测试代码和虚拟表之间强制执行一对一的关系。这看起来好像是真的是丑陋,所以有一个更好的方法。对?

+1

为什么不只是与程序代码相关联的测试代码FK表? – Paparazzi 2013-03-27 20:14:44

你有没有读过标准化(如果你不是为什么要设计一个数据库?)。您应该有一个结构与

tableA 
id (PK) 
programcode 
other fields 

tableB 
programcode (PK) 
testcode 

在两个表之间添加一个正式的外键,并将程序代码定义为tableb中的PK。 然后获取数据你想要的:

select <Name specific fields, never use select *> 
from tableA a 
join tableB b on a.programcode = b.programcode 
+0

这是一个传统数据库!这听起来像我需要两个表来建立这种关系 – bernie2436 2013-03-27 20:29:01

+0

为什么不使用select *?我仍然在学习 – bernie2436 2013-03-27 20:32:38