我是 PostgreSQL 新手。
我想知道,如何使列成为下拉列表。
所以我有一张名为 Student 的桌子。里面有一栏叫“student_type”,表示学生是兼职学生、全日制学生还是三明治课程学生。
所以我想让“student_type”成为一个下拉列表,有 3 个选项:“part time” student、“full time”和“sandwich”。
我该怎么做呢?
(顺便说一下,我正在使用 pgAdmin 创建数据库。)
我是 PostgreSQL 新手。
我想知道,如何使列成为下拉列表。
所以我有一张名为 Student 的桌子。里面有一栏叫“student_type”,表示学生是兼职学生、全日制学生还是三明治课程学生。
所以我想让“student_type”成为一个下拉列表,有 3 个选项:“part time” student、“full time”和“sandwich”。
我该怎么做呢?
(顺便说一下,我正在使用 pgAdmin 创建数据库。)
下拉菜单是客户端的事情,应该相应地处理。但就关系数据库而言,应该存在一个student_type关系与你会像这样查询的id
列type
:
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 将是选项值和选项文本。
我想你以前用过 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”列。