ser*_*zem 3 postgresql database-design sequence postgresql-9.3
在我的系统中,我希望每个用户都有自己的文章id序列。
因此,我创建了一个数据库,其中包含一个表,描述了users它们之间的对应关系articles。以下是该表的概要:
+------+----------+---------+
| 身份证 | 文章 | 用户 ID |
+------+----------+---------+
| 1 |一些笔记| 1 |
+------+----------+---------+
| 2 |一些笔记| 1 |
+------+----------+---------+
| 3 |一些笔记| 2 |
+------+----------+---------+
| 4 |一些笔记| 2 |
+------+----------+---------+
| 5 |一些笔记| 3 |
+------+----------+---------+
但我想ids通过以下方式在这个表中生成:
+------+----------+---------+
| 身份证 | 文章 | 用户 ID |
+------+----------+---------+
| 1 |一些笔记| 1 |
+------+----------+---------+
| 2 |一些笔记| 1 |
+------+----------+---------+
| 1 |一些笔记| 2 |
+------+----------+---------+
| 2 |一些笔记| 2 |
+------+----------+---------+
| 3 |一些笔记| 2 |
+------+----------+---------+
| 1 |一些笔记| 3 |
+------+----------+---------+
因此,当user在关联user表中创建新表时,id他的文章的序列将从1开始。
有没有普遍接受的方法来解决这个问题?
这已经被问过很多次了。长短不一:不要尝试。您会遇到并发性、删除行导致的间隙等各种问题。制作id一个普通serial列并创建一个VIEW以显示每个user_id.
CREATE VIEW v_user_article AS
SELECT *, row_number() OVER (PARTITION BY user_id ORDER BY id) AS per_user_id
FROM user_article;
Run Code Online (Sandbox Code Playgroud)
article带有“一些注释”的列对您的设置几乎没有意义。并且按它排序更没有意义,因为数字会随着每一篇没有排在最后的新文章而改变。要获得稳定的排序顺序和稳定的数字(删除除外!)使用serial列来确定排序顺序。
细节: