假设我想使用像postgresql这样的db创建一个典型的todo-webApp.用户应该能够创建待办事项列表.在这个列表中,他应该能够制作实际的todo条目.
我认为todo-list是一个具有不同属性的对象,如所有者,名称等,当然还有实际的todo-entries,它们有自己的属性,如content,priority,date .......
我的想法是为所有用户的所有待办事项列表创建一个表.在此表中,我将存储每个列表的所有属性.但出现的问题是如何存储todo条目本身?当然在附加表中,但我应该宁愿:
1.为所有条目创建一个大表,并有一个字段存储它们所属的待办事项列表的id,如下所示:
todo-list: id, owner, ...
todo-entries: list.id, content, ...
Run Code Online (Sandbox Code Playgroud)
这将总共给出2个表.todo-entries表可能变得非常大.虽然我们知道条目到期,但是表格只会随着使用量的增加而增长但不会随着时间的推移而增长.然后,我们会写东西喜欢SELECT * FROM todo-entries WHERE todo-list-id=id在那里id是我们试图检索列表.
要么
2.基于每个用户创建todo-entries表.
todo-list: id, owner, ...
todo-entries-owner: list.id, content,. ..
Run Code Online (Sandbox Code Playgroud)
条目数表取决于系统中的用户数.有点像SELECT * FROM todo-entries-owner.中型表格取决于用户总共输入的条目数.
要么
3. 为每个待办事项列表创建一个todo-entries-table,然后将生成的表名存储在表的字段中.例如,我们可以在表名中使用todos-list唯一ID,如:
todo-list: id, owner, entries-list-name, ...
todo-entries-id: content, ... //the id part is the id from the todo-list id field.
Run Code Online (Sandbox Code Playgroud)
在第三种情况下,我们可能会有相当多的表.用户可能会创建许多"短"待办事项列表.要检索列表中,我们会那么只需沿着线去SELECT * FROM todo-entries-id那里todo-entries-id应该是在待办事项列表的字段,也可能隐含通过连接"待办事项条目"与待办事项列表的唯一ID来完成.顺便说一句:我该怎么做,如果这样做js或者可以直接在PostgreSQL中完成?与此非常相关:在SELECT * FROM <tablename>声明中,是否可以将某些其他表的某些字段的值作为 …
我在创建表连接时遇到了麻烦.查询永远运行.我在一张桌子上打开了街道地图自行车路线,其中包含所有属性.
Table planet_osm_line
osm_id bigint,
route text,
name text,
network text,
osmc_color text,
reversed text,
state text,
"instance:cycle" text,
"relation:id" text,
ref text,
description text,
distance text,
tags hstore,
way geometry(LineString,900913)
Run Code Online (Sandbox Code Playgroud)
有些行是重复的(一条路上有2条或更多条路线)所以我将唯一的行过滤到另一个表中,我尝试将它们与planet_osm_line中的数据合并:
DROP TABLE IF EXISTS public.bicycle_merge;
CREATE TABLE public.bicycle_merge AS
WITH singleRow as (
select count(way), way
from planet_osm_line
WHERE route IN ('bicycle')
group by way
having count(way) = 1
)
SELECT P.*
FROM planet_osm_line P
JOIN singleRow S
ON P.way = S.way
;
Run Code Online (Sandbox Code Playgroud)
这个查询永远运行....请原谅我的新手问题,但我做错了什么?
"Nested Loop (cost=28767.43..172920474.87 rows=5892712 …Run Code Online (Sandbox Code Playgroud) 我有一个多维数组,其中第三维代表时间。为了解决这个问题,我们使用包ozone中的数据集plyr:
> str(ozone)
num [1:24, 1:24, 1:72] 260 258 258 254 252 252 250 248 248 248 ...
- attr(*, "dimnames")=List of 3
..$ lat : chr [1:24] "-21.2" "-18.7" "-16.2" "-13.7" ...
..$ long: chr [1:24] "-113.8" "-111.3" "-108.8" "-106.3" ...
..$ time: chr [1:72] "1" "2" "3" "4" ...
Run Code Online (Sandbox Code Playgroud)
从文档中:
这些数据是从 1995 年 1 月到 2000 年 12 月覆盖中美洲的非常粗略的 24 x 24 网格上的每月臭氧平均值。数据存储在 3d 区域中,前两个维度代表纬度和经度,第三个维度代表时间。
我想做的是为每个纬度/经度单元格创建月平均值。我可以对单个纬度/经度组合执行此操作,tapply如下所示:
> tapply(ozone[1,1,], rep(1:12, 6), mean)
1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试为我的数据库构建一个文档系统,我想包括我的函数和触发器的源代码。
我设法找到了有关函数和触发器的所有元数据,但是这些函数和触发器的实际主体存储在哪里?
我有两个具有相同列的表,顺序相同。我希望根据子查询条件连接两个表之一。例如,假设我有以下架构:
CREATE TABLE b (
bid SERIAL PRIMARY KEY,
cid INT NOT NULL
);
CREATE TABLE a1 (
aid SERIAL PRIMARY KEY,
bid INT NOT NULL REFERENCES b
);
CREATE TABLE a2 (
aid SERIAL PRIMARY KEY,
bid INT NOT NULL REFERENCES b
);
Run Code Online (Sandbox Code Playgroud)
我想要一个查询,它根据某些条件在a1或a2之间执行连接。就像是:
WITH z AS (
SELECT cid, someCondition FROM someTable
)
SELECT *
FROM CASE z.someCondition THEN a1 ELSE a2 END
JOIN b USING (bid)
WHERE cid = (SELECT cid FROM z); …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用PL \ pgSQL过程语言创建两个几何数据类型的函数,例如多点和多行字符串。我想为所有点选择30米距离内的所有线。这是我尝试过的:
Create OR Replace Function get_streets(bar.geom geometry foo.geom geometry)
Returns geometry AS $$
BEGIN
IF ST_DWithin(bar.geom, foo.geom, 30.0) Then
Return foo.geom;
ELSE
Return null;
END IF
Return foo.geom;
END;
$$ Language plpgsql;
Run Code Online (Sandbox Code Playgroud)
由于几何数据类型,该函数返回错误。在plpgsql函数中使用/处理几何数据有什么建议吗?