mysql:可以嵌套表吗?

az31mfrm  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(540)

如何设计一个表来保存以下数据:

name
age
last_30_measurements
    timestamp, value
    timestamp, value
    timestamp, value
    timestamp, value
    ..

如你所见, last_30_measurements 可以是它自己的表,包含一个成对的列表timestamp,value。
正确的方法是什么?

46scxncf

46scxncf1#

为此,我将使用另一个表,并使用外键来链接这两个表。
例如:
架构(mysql v5.7)

CREATE TABLE mesurer_dude
(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255) NOT NULL,
    age INT NOT NULL
);

CREATE TABLE mesurements
(
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    mesure_date DATETIME NOT NULL,
    mesure_value INT NOT NULL,
    mesurer_dude_id INT NOT NULL,
    CONSTRAINT FOREIGN KEY (mesurer_dude_id) REFERENCES mesurer_dude(id)
);

INSERT INTO mesurer_dude VALUES (default, "John", 42), (default, "Jane", 69);
INSERT INTO mesurements VALUES (default, NOW(), 10, 1), (default, DATE_ADD(NOW(), INTERVAL 1 DAY), 20, 1), (default, DATE_ADD(NOW(), INTERVAL 2 DAY), 25, 1), (default, DATE_ADD(NOW(), INTERVAL 3 DAY), 15, 1), (default, DATE_ADD(NOW(), INTERVAL 4 DAY), 12, 2);

查询#1

-- get the last 30 mesurements of john
SELECT *
FROM mesurer_dude d
INNER JOIN mesurements m
ON d.id=m.mesurer_dude_id
WHERE d.name = 'John'
ORDER BY m.mesure_date DESC
LIMIT 30;

结果:

| id  | name | age | id  | mesure_date         | mesure_value | mesurer_dude_id |
| --- | ---- | --- | --- | ------------------- | ------------ | --------------- |
| 1   | John | 42  | 4   | 2018-11-25 14:37:33 | 15           | 1               |
| 1   | John | 42  | 3   | 2018-11-24 14:37:33 | 25           | 1               |
| 1   | John | 42  | 2   | 2018-11-23 14:37:33 | 20           | 1               |
| 1   | John | 42  | 1   | 2018-11-22 14:37:33 | 10           | 1               |

db fiddle视图

相关问题