PostgreSQL - CREATE TABLE - применять ограничения, такие как PRIMARY KEY, в атрибутах, которые находятся внутри составных типов - PullRequest
1 голос
/ 06 октября 2019

Я хочу реализовать объектно-реляционную базу данных, используя PostgreSQL. Я не хочу использовать ORACLE. Можно ли создать составной тип, а затем использовать его в таблице, добавив ограничение, например, для первичного ключа в одном из его атрибутов? Ниже я оставляю пример:

CREATE TYPE teamObj AS (
    idnumeric,
    name character varying,
    city character varying,
    estadiumName character varying,
    jugadores playerObj[]
);

CREATE TABLE teamTable (
    equipo equipoobj,
    PRIMARY KEY (equipo.id)
);

Строка PRIMARY KEY (equipo.id) выдает ошибку, и я прочитал много документации по этой теме, и я нене могу найти решение, возможно, PostgreSQL еще не реализован или никогда не будет реализован, или я не понимаю, как работает PostgreSQL ...

У кого-нибудь есть решение?

Спасибо.

1 Ответ

1 голос
/ 06 октября 2019

Нет, вы не можете этого сделать, и я рекомендую вам не создавать такие таблицы.

Ваше определение таблицы должно выглядеть почти так же, как и определение типа. Нет необходимости в определении промежуточного типа.

Причины:

  • , которые не сделают вашу схему более читабельной

  • которая нарушает первую нормальную форму для реляционных баз данных

  • , которая не соответствует объектно-ориентированному дизайну лучше, чем простое определение таблицы

КакДля удобства PostgreSQL будет неявно определять составной тип с одним и тем же именем каждый раз, когда вы определяете таблицу, поэтому вы можете делать такие вещи, как

CAST(ROW(12, 'Raiders', 'Wolfschoaßing', 'Dorfwiesn', NULL) AS team)

или

CREATE FUNCTION getteam(id) RETURNS team
...