我有一个CONSUMER实体和一个DEVICE实体。消费者和设备之间存在N:M关系。
我有来自CONSUMER的外键CONSUMER_EMAIL和来自DEVICE的DEVICE_INDEX_ID。 CONECTION有时间属性。
生成令牌并将其发送给用户,以便他可以进行身份验证以便请求数据。
拥有这两个外键并且还有(device_index_id,time)允许将每个设备区分为唯一键是否有意义? 表格草图:
-------------------------------------------------------------
-- User [conects from] device relationship N:M ----------
CREATE TABLE conection (
token CHAR(64) NOT NULL, -- Randomly generated and sent to the user
consumer_email VARCHAR(254) NOT NULL,
device_index_id UNSIGNED MEDIUMINT NOT NULL,
time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (consumer_email)
FOREIGN KEY (device_index_id)
UNIQUE KEY (device_index_id, time)
PRIMARY KEY (token)
) ENGINE=InnoDB;
答案 0 :(得分:1)
N:M关系表只是
CREATE TABLE ConsumerDevice (
consumer_email ... -- PRIMARY KEY for Consumer
device_index_id ... -- PRIMARY KEY for Device
PRIMARY KEY(consumer_email, device_index_id) -- for going one way
INDEX( device_index_id, consumer_email) -- for going the other direction
) ENGINE=InnoDB;
是的,您可以添加
time TIMESTAMP NOT NULL
甚至将它默认为更新到当前时间。
您的token
是不必要的。
对于给定的Consumer-Device对,您不应该有多行。
2 FOREIGN KEYs应该是显而易见的,但为什么要这么麻烦?
使用INSERT ... ON DUPLICATE KEY UPDATE ...创建新行或一步更新time
。