符号极性的自然键

Natural key for sign polarity

多对多 table 连接两个实体 table。我需要在多对多 table 中增加一个列来表示极性,它应该只有两个值,一个代表正,第二个代表负。

为了实现这一点,我计划添加一个名为 sign 的 table,它将有一个名为 sign 的列(这也是 table 的主要列键),table 将只包含两个值,一个代表正数,另一个代表负数。

前面提到的多对多table可以包含sign.sign作为外键,并且只允许两个值。

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

如果接受table解,那么这两个值应该是多少?可能的答案是:

我特意包含了 php 标签,以表明我将使用 PHP,希望一个解决方案优于另一个解决方案可以简化 PHP 实施。

我不是严格意义上的 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 ('+', '-'))
)

就我个人而言,我认为 "positive" 和 "negative" 以及 +- 的最佳符号。

如果希望在查询中使用登录算法,那么 1/-1 可能是最佳选择。