0

我是 PostgreSQL 新手。

我想知道,如何使列成为下拉列表。

所以我有一张名为 Student 的桌子。里面有一栏叫“student_type”,表示学生是兼职学生、全日制学生还是三明治课程学生。

所以我想让“student_type”成为一个下拉列表,有 3 个选项:“part time” student、“full time”和“sandwich”。

我该怎么做呢?

(顺便说一下,我正在使用 pgAdmin 创建数据库。)

4

2 回答 2

1

下拉菜单是客户端的事情,应该相应地处理。但就关系数据库而言,应该存在一个student_type关系与你会像这样查询的idtype

select st.id, st.type
from student_type st
inner join student s on s.type_id = st.id 
group by st.id, st.type
order by st.type

内连接是为了确保您不显示学生表中不存在的选项,因此如果选择会产生空结果。在客户端,id 应该是选项值,类型是选项文本。

如果由于错误的数据库设计而没有 student_type 关系,或者您只被允许查询非规范化视图,您仍然可以使用学生关系:

select distinct student_type
from student
order by student_type

在这种情况下,student_type 将是选项值和选项文本。

于 2012-03-16T14:35:47.997 回答
0

我想你以前用过 MS Access。无法使用 pgAdmin 创建这样的下拉列表,但可以通过几种不同的方式限制字段“student_type”中的可接受值。不过,这不会是下拉列表或组合框。

eg: 可以使用带字典的表,然后使用外键,可以使用约束来检查插入的值,可以使用域(该字段的类型是Your domain,并且该域是基于正确的约束)您可以使用触发器(在插入或更新之前)等。

换句话说,Postgres 是一个数据库,而不是一个用户界面库。它没有下拉列表、文本框、标签等等。人类不能以这种方式直接使用它。

PG 可以做的是为此类小部件使用的数据提供稳定的来源。每个小部件库对于如何绑定(即连接)到数据源都有自己的规则。有些允许您直接将可视组件(在本例中为下拉小部件)连接到数据库,或者更好的是,连接到数据库光标。

With Postgres, you can create a cursor, which is an in-memory window into the result of a SELECT query of some kind, that your widget or favorite programming language binds to. In your example, the cursor or widget binding would be to the result of a "SELECT student_type FROM student_type" query.

顺便说一句,“student_type”的值不应该只存储在“student”中。您应该有一个规范化的表结构,这里会给您一个“student_type”表,其中包含三个选项,每行一个。(还有其他方法可以做到这一点。)您指定的值将是主键列。(或者,您可以将这些值放在以代理键作为主键的 UNIQUE 列中,但这对于简单的查找表来说可能有点过头了。)“student.student_type”列将成为“student_type”的外键.student_type”列。

于 2019-12-25T10:43:26.340 回答