在PostgreSQL中设置性别

时间:2011-10-27 02:58:21

标签: database ruby-on-rails-3 postgresql

在Rails 3中设置性别字段的最佳方法是什么?我正在使用PostgreSQL。

我目前将它作为一个字符串,但我想知道将它设置为整数会更容易(更好吗?)。如果是这样,怎么办呢?我想为它制作一个下拉列表,其中包括三个值:“男性”,“女性”,“没有您的业务”。

对不起基本问题,但我很好奇简单的最佳做法。

5 个答案:

答案 0 :(得分:6)

答案 1 :(得分:6)

这是域名的用途:

DROP SCHEMA tmp CASCADE;
CREATE SCHEMA tmp;
SET search_path=tmp;

CREATE DOMAIN gender CHAR(1)
    CHECK (value IN ( 'F' , 'M' ) )
    ;

CREATE TABLE persons
    ( pname VARCHAR
    , gend tmp.gender
    );
INSERT INTO persons( pname, gend) VALUES ('Alice', 'F') ,('Bob', 'M') ;
INSERT INTO persons( pname) VALUES ('HAL') ;
INSERT INTO persons( pname, gend) VALUES ('Maurice', 'Q') ;

SELECT * FROM persons;

输出:

DROP SCHEMA
CREATE SCHEMA
SET
CREATE DOMAIN
CREATE TABLE
INSERT 0 2
INSERT 0 1
ERROR:  value for domain gender violates check constraint "gender_check"
 pname | gend 
-------+------
 Alice | F
 Bob   | M
 HAL   | 
(3 rows)

答案 2 :(得分:4)

我同意迈克琼斯的观点。 ENUM是完美的。对于很少改变的小型价值观,ENUM非常棒。性别就是一个很好的例子。通常你只需要5:男性,女性,Intersex,变性人,未知。很多人跟3:男,女,其他。 2然而(男性,女性)对于那些不是男性或女性的人是卑鄙的。

答案 3 :(得分:1)

如何使用简单的is_male:boolean字段?

is_female,如果您愿意。

无论哪种方式,默认情况下,nil(null)都不应该计算为true或false。

答案 4 :(得分:0)

非常简单:

只需使用枚举:

CREATE TYPE gen AS ENUM ('f', 'm');

CREATE TABLE lawyers_tb (
  ID SERIAL PRIMARY KEY,
  name VARCHAR,
  gender gen
);

INSERT INTO lawyers_tb (name, gender)
  VALUES ('Jose Luis Gonzales', 'm');