我在mysql数据库中有一个用户表,如下所示:
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(255) | YES | | NULL | |
| password | varchar(255) | YES | | NULL | |
| recent | varchar(255) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
我需要保存用户查看的最后 20 个 ID。我的第一直觉是使用字符串来保存逗号分隔的列表,但这违反了规范化。我只需要保存 20 个 ID,并且是某个特定的用户查看了它们。
我能想出的最好的方法是保持标准化,是这样的:
users
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(255) | YES | | NULL | |
| password | varchar(255) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
users_pages
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| users_id | int(11) | YES | MUL | NULL | |
| pages_id | int(11) | YES | MUL | NULL | |
+-------------+--------------+------+-----+---------+----------------+
pages
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| page01 | int(11) | YES | | NULL | |
| page02 | int(11) | YES | | NULL | |
| page03 | int(11) | YES | | NULL | |
| page04 | int(11) | YES | | NULL | |
| page05 | int(11) | YES | | NULL | |
| page06 | int(11) | YES | | NULL | |
| page07 | int(11) | YES | | NULL | |
| page08 | int(11) | YES | | NULL | |
| page09 | int(11) | YES | | NULL | |
| page10 | int(11) | YES | | NULL | |
| page11 | int(11) | YES | | NULL | |
| page12 | int(11) | YES | | NULL | |
| page13 | int(11) | YES | | NULL | |
| page14 | int(11) | YES | | NULL | |
| page15 | int(11) | YES | | NULL | |
| page16 | int(11) | YES | | NULL | |
| page17 | int(11) | YES | | NULL | |
| page18 | int(11) | YES | | NULL | |
| page19 | int(11) | YES | | NULL | |
| page20 | int(11) | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
但我知道在列名中包含数字并不理想。另外,我不知道如何更新第 21 页视图上的表格。它需要通过将第 21 个页面视图放在 page20 列中进行更新,而 page20 变为 page19,page19 变为 page18,依此类推,直到 page2 变为 page1,并且旧的 page1 被遗忘。
我认为一种叫做 CASCADE 的东西可能很有用,但尽管谷歌搜索我无法清楚地理解它的含义或如何使用它。
如果有什么不同,我正在通过 PHP 访问 MySQL。
如果有人可以让我更好地了解如何处理这个问题,我将不胜感激。