0
假设我们有系统,子系统和设备。他们每个人都在0 .. *关系。 下面是表(属性不显示,为了简化)插入分层相关数据
CREATE TABLE system(
sid INT NOT NULL AUTO_INCREMENT,
sysident VARCHAR(80) NOT NULL,
//...
cid INT NOT NULL, //Foreign Key to Customer
PRIMARY KEY(sid));
CREATE TABLE subsystem(
subsid INT NOT NULL AUTO_INCREMENT,//...
subsident INT NOT NULL,
sid INT NOT NULL, //systems foreign key
PRIMARY KEY(subsid));
CREATE TABLE device(
did INT NOT NULL AUTO_INCREMENT,//...
dident INT NOT NULL,
subsid INT NOT NULL, //subsystems foreign key
PRIMARY KEY(did));
现在假设有其中sb可以上传的数据的接口。数据构造(JSON)这样
{
"systemname": "testsystem", //system.systemname
"deviceinfos": [
{
"id": "2-90" //"subsystem.subsystemident-device.deviceident"
}]
}
任务是在表中插入或更新的数据。 (也许一些元数据改变设备testsystem-2-90(此IDENT不是唯一的表中)
做法是:?
INSERT INTO system(sid, sysident, cid) VALUES
(
(SELECT sid FROM (SELECT DISTINCT sid FROM user
JOIN customer on user.cid = customer.cid JOIN system
ON system.cid = customer.cid
WHERE customer.cid = 1 and system.sbid = 1 as a), 'systemsname', 1)
) ON DUPLICATE KEY UPDATE // some metainfo
有没有办法让这个简单的对于系统,插入其没有问题/正确更新这一点。但对于子系统和器件方面变得越来越大,我是谨慎的做法。
有什么建议?