2015-05-12 13 views
3

我尽了我的尽职调查资源并搜索解决此问题的方法,但找不到合适的答案具体的用例。将两列限制为两个字段必须有数据的位置,或者两个字段都必须为NULL

我在一张表中有两列:Packaged_ByPackaged_Time。两者都初始化为NULL字段。

我想要什么:我希望两个领域:1)有一个值不是NULL,或者2)请将这两个字段作为NULL

我不想要什么:我再也不想为了有其中一个列有一个值,但在其他列保持NULL的情况下。这大大提高了我的数据库完整性。

不幸的是,我一直无法弄清楚如何用独特的约束来做到这一点。

我的问题:我可以使用约束来强制两个字段同时具有数据或NULL值吗?是否有可能使用触发器来实现这一点?我错过了什么?

任何指导或方向将不胜感激。谢谢。

编辑:我正在使用MySQL。

+0

为什么不为这两个设置一个默认值? – JordanBelf

+0

我认为在MS SQL中你可能会设置约束条件(但我不太确定)。在MySQL中,我认为你可以完成这个任务的唯一方法是使用TRIGGERs强制将NULL都设为NULL。另外,关于UNIQUE约束,MySQL将每个NULL视为唯一;这可能是不相关的,因为两行在这些字段中具有相同的值可能合法(即使不太可能)。 – Uueerdo

+1

检查这个问题和答案:http://stackoverflow.com/questions/2115497/check-constraint-in-mysql-is-not-working – Tim3880

回答

2

该设计违反了Second Normal Form。你应该处理它的方式是创建第二个表,其中包括两个不可为空的数据字段和一个到原始表的外键。

+0

我检查了你的资源,这非常有趣,但我不确定(用简单的英语)为什么我试图做的是坏的练习,当最终结果是我会有效地限制我的数据。部分我觉得这样会导致不必要的连接,进一步减慢我的查询速度。坚持这个标准有什么好处? –

+0

为什么坏习惯是什么?你的原创设计? [见这里](http://stackoverflow.com/questions/29930453/)。如果你需要这样做,这是一个必要的连接,而不是不必要的连接。您无法通过“感觉”来分析性能,您必须在真实应用程序上进行测试。如果像这样的东西显着减慢你的应用程序,你使用的是错误的数据库技术。 –

+0

连接可能会影响查询性能,并且有些人会执行一些非标准化以帮助提高性能。此处的问题是,您希望获得这些好处并使用不支持检查约束的数据库服务器。 – Tim3880

相关问题