我有一张包含两个子表的表。对于父表中的每条记录,我想在其中一个子表中只有一条记录 - 每条记录不是一条记录,而不是一条记录。我该如何定义?
这是背景故事。请随意批评这个实现,但请回答上面的问题,因为这不是我遇到它的唯一一次:
我有一个数据库,其中包含与用户调查有关的数据。它最初设计有一种用于启动调查的身份验证方法。从那以后,需求发生了变化,现在有两种不同的方式可以签署开始调查。
最初我在调查表的一列中捕获了身份验证令牌。由于需求发生了变化,我想在身份验证中捕获另外三个数据位。因此,对于调查表中的每条记录,我要么有一个令牌,要么一个三个。所有这四个都是不同的类型,所以我的想法是,而不是有四列,其中任何一个将为null,或者三个将是null(或者更糟糕的是,这些场景中的任何一个的糟糕混搭),我会有两个子表,一个用于保存单个身份验证令牌,另一个用于保存三个。问题是,我不知道如何在DDL中定义它。
我正在使用MySQL,所以也许有一个MySQL没有实现的功能让我这样做。
答案 0 :(得分:1)
有多种方法可以实现此
布尔标志逻辑
你可以在ParentTable中有一个名为ChildTableDataInserted的布尔标志,如果在任何一个表中插入行,你可以将其更新为TRUE。如果ChildTableDataInserted为False,则仅插入子行。这当然取决于使用您创建的存储过程的所有插入,并且很容易被违反,但数据库的开销很小。
<强>触发器强>
将数据插入上的 BEFORE INSERT 放到两个子表中,如果满足您的错误条件,则可以引发插入错误。
我个人避免使用触发器,除非我绝对没有其他选择,这似乎是实现触发器的好地方。
在此处阅读有关触发器的更多信息