对外表中非id的约束

时间:2013-08-28 15:25:20

标签: sql sql-server-2008

我有两张桌子:

EMAIL_QUEUE
  ID identity,
  MIME_TYPE_ID int foreign key MIME_TYPE(id)
  etc...

MIME_TYPE
  ID identity,
  MIME_TYPE varchar(300),
  etc...

MIME_TYPE目前未声明为唯一身份。我想在我的EMAIL_QUEUE表上设置一个约束,以便它只接受某些mime类型(text / plain和text / html)。这样做的最佳做法是什么?

  1. 使用自定义函数和检查约束
  2. 将MIME_TYPE列设为MIME_TYPE表的主键,并对可能的值设置约束

2 个答案:

答案 0 :(得分:1)

添加检查约束。例如,如果两个所需的mime类型的ID是3和4:

ALTER TABLE EMAIL_QUEUE WITH CHECK
  ADD CONSTRAINT MIME_TYPE_CHECK CHECK (MIME_TYPE_ID IN (3,4))

ID值不应该改变,因此可以硬编码可接受的值。

答案 1 :(得分:0)

这也可以通过一个附加表来解决

-- this table is unchanged
MIME_TYPE
  ID identity,
  MIME_TYPE varchar(300),
  etc...

-- additional table, which should contain ids of the 'text/plain' and 'text/html'
EMAIL_QUEUE_MIME_TYPE
  ID int -- PK and FK to MIME_TYPE(id)

-- in this table MIME_TYPE_ID should be redirected to new table
EMAIL_QUEUE
  ID identity,
  MIME_TYPE_ID int foreign key EMAIL_QUEUE_MIME_TYPE(id)
  etc...