符号极性的自然键

时间:2018-03-24 12:59:43

标签: php mysql sql boolean natural-key

多对多表连接两个实体表。我需要在多对多表中使用一个额外的列来表示极性,它应该只有两个值,其中一个表示正数,第二个表示负数。

为了实现这一点,我计划添加一个名为sign的表,它将有一个名为sign的列(也是表的主键),并且该表将只包含两个值一个代表积极,另一个代表消极。

上述多对多表可以包含sign.sign作为外键,只允许这两个值。

如果这是一个糟糕的解决方案,请评论您为什么这样做以及可能是更好的解决方案。

如果是可接受的解决方案,那么这两个值应该是什么?可能的答案是:

  • 正面和负面(不会使用)
  • p和n(可能不是)
  • 1和0
  • 1和-1

我故意包含php标记,表明我将使用PHP,因为一个解决方案可能会简化PHP实现。

2 个答案:

答案 0 :(得分:1)

我并不是bit的忠实粉丝,但是这样的事情应该做你想做的事情并明确:

create table . . . (
    . . . 
    sign_is_positive bit(1) not null,
    . . . 
)

另一种方法是使用check约束,MariaDB的更新版本支持该约束。我可能倾向于这样做:

create table . . . (
    . . . 
    sign char(1) not null,
    . . . 
    constraint chk_t_sign check sign (sign in ('+', '-'))
)

就个人而言,我认为“正面”和“负面”以及+-的最佳符号。

答案 1 :(得分:1)

如果希望在查询中使用符号算法,则1 / -1可能是最佳选择。