Настройка пола в PostgreSQL - PullRequest
       3

Настройка пола в PostgreSQL

6 голосов
/ 27 октября 2011

Как лучше всего настроить гендерное поле в Rails 3?Я использую PostgreSQL.

У меня в настоящее время есть строка, но мне интересно, будет ли проще (лучше?) Установить ее как целое числоЕсли так, как это будет сделано?Я хочу создать выпадающий список, включающий три значения: «Мужской», «Женский», «Не ваше дело».

Извините за основной вопрос, но мне интересно узнать о простых, лучших практиках.

Ответы [ 5 ]

6 голосов
/ 27 октября 2011

Для чего предназначены домены:

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)
6 голосов
/ 27 октября 2011

Перечень кажется лучшим: http://www.postgresql.org/docs/current/static/datatype-enum.html

4 голосов
/ 31 октября 2011

Я согласен с Майком Джонсом.ENUM идеально подходят для этого.ENUM хороши для небольших наборов значений, которые редко меняются.Пол является прекрасным примером этого.Обычно вам нужно только 5: мужчина, женщина, интерсекс, трансгендер, неизвестно.Многие идут с 3: мужчина, женщина, другие.2 Однако (мужчина, женщина) имеет в виду тех, кто не является мужчиной или женщиной.

1 голос
/ 27 октября 2011

Как насчет использования простого поля is_male:boolean?

Или is_female, если вы предпочитаете.

В любом случае, по умолчанию nil (null) не должен иметь значение true или false.

0 голосов
/ 09 июня 2016

Очень просто:

Просто используйте enum:

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');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...