如果这听起来很奇怪,我不确定如何说出这个问题。
我的数据库中有一个名为// The minimum and maximum values for d - also the 'input'
const minDValue = 0.004;
const maxDValue = 0.1;
// The minimum and maximum values for scale - also the 'output'
const minScaleValue = 0.1;
const maxScaleValue = 1;
// Absolute ranges for d and scale:
const dRangeAbs = maxDValue - minDValue;
const scaleRangeAbs = maxScaleValue - minScaleValue;
// restricts the value of d if it exceeds the bounds:
// 'minDValue <= d <= maxDValue'
function restrictD(d) {
return Math.max(minDValue, Math.min(maxDValue, d));
}
// Calculate the absolute scale value for a certain d-value.
function scaleForDValue(d) {
// First, restrict the input. If not restricted the input 'scale' is
// not accurate, and we can not determine the corresponding scale.
d = restrictD(d);
// Determine how far (as fraction of 1) the d-value sits along
// the absolute d-range:
const dProgressFraction = (d - minDValue) / dRangeAbs;
// Use the d-progress-fraction to add a corresponding relative
// progress value for the scale-'scale'. Because the scale is
// inverted, we subtract the progress from the max-value this
// time.
const calculatedScale = maxScaleValue - (dProgressFraction * scaleRangeAbs);
// Restrict calculated value to prevent rouding error.
return Math.min(maxScaleValue, Math.max(minScaleValue, calculatedScale));
}
// Log some values!
const log = (val, info) => console.log({ d: val, scale: scaleForDValue(val), info });
log(minDValue, 'this is the min d-value');
log(minDValue - 1, 'this is a too low d-value');
log(maxDValue, 'this is the max d-value');
log(maxDValue + 1, 'this is a too high d-value');
for (let i = 0; i < 5; i++) {
log(minDValue + Math.random() * dRangeAbs, 'A random d-value');
}
的表,其中包含以下列:friendRequests
,id
,sender_id
和recipient_id
。如何确保没有其他行具有重复的status
和recipient_id
值?
例如,如果我在表格中有一行包含以下值:sender_id
,我怎样才能确保没有其他行的(1, 4, 6, 0)
为4和{{1} 6个 AND ,没有其他行的sender_id
为6,recipient_id
为4?
答案 0 :(得分:0)
您必须在表格上创建唯一索引。
create unique index sender_recipient
on friendRequest (sender_id, récipient_id)
答案 1 :(得分:0)
我听到的是,如果用户A邀请用户B,则您不想为使用A的用户B创建新记录。
我不认为可以强制执行这样的约束,除非可能通过使用触发器,我可能不会推荐。我建议您在申请中尝试执行此操作。
答案 2 :(得分:0)
对于same relations
- 在<sender, receiver>
上使用唯一约束。
然而,反向关系<receiver, sender>
是可能的,因为它是唯一键约束的不同ID。
要处理这个问题(使用uniqe键约束),你必须添加另一个列,让我们称之为friendship
- 在那里,你将添加一个唯一的键约束,并插入用户id,连接,BUT订购:
即。如果用户3
向10
发送了好友请求,您就会将3-10
插入该列。如果邀请从10
发送到3
,您也会添加3-10
。
通过这种方式,您可以跟踪世卫组织发起的友谊(sender_column=3
,receiver-column=10
),同时确保没有向后邀请(friendship=3-10
已存在)
这就像
INSERT INTO friendships(sender, receiver, friendship) VALUES(3,10,"3-10");
or vice versa:
INSERT INTO friendships(sender, receiver, friendship) VALUES(10,3,"3-10");
如果已经请求了友谊,则其中一个约束将避免插入。 (实际上,第二个约束对于任何情况都是足够的,前两列只允许确定友谊的主动和被动部分。)