ОШИБКА 42830 SQL

У меня проблема с созданием таблицы отношений, ошибка будет следующей: не существует уникального ограничения, соответствующего столбцам в таблице, именуемой «песня». Проблема в том, что для отношений «песня» это ограничение дает мне: песни идентифицируются по имени и по исполнителю, который их зарегистрировал, это имя также varchar (50). Duration, downloads и anio_creacion являются целыми числами

Мои таблицы будут такими:

CREATE TABLE artista (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(50) UNIQUE,
    nombre_real VARCHAR(50),
    sigue_activo bool,
    pais_origen VARCHAR(50),
    anio_nacimiento INT
);


CREATE TABLE usuario(
    nombre_completo VARCHAR(50),
    username VARCHAR(50) PRIMARY KEY,
    password VARCHAR(30),
    anio_inicio INT,
    pais_usuario VARCHAR(50)
)

CREATE TABLE cancion(
    nombre VARCHAR(50),
    artista SERIAL,
    duracion INT, 
    descargas_actuales INT, 
    anio_creacion INT,
    PRIMARY KEY(nombre, artista),
    CONSTRAINT fk_artista FOREIGN KEY(artista)
    REFERENCES artista(id)
)


CREATE TABLE en_lista(
    nombre_usuario VARCHAR(50),
    nombre_cancion VARCHAR(50),
    artista SERIAL,
    anio_agregacion INT,
    PRIMARY KEY(nombre_usuario, nombre_cancion, artista),
    CONSTRAINT fk_usuario FOREIGN KEY(nombre_usuario) REFERENCES usuario(username),
    CONSTRAINT fk_cancion FOREIGN KEY(nombre_cancion) REFERENCES cancion(nombre),
    CONSTRAINT fk_artista FOREIGN KEY(artista) REFERENCES artista(id)
)

Заранее спасибо!

0
задан 30.11.2019, 04:59
1 ответ

DefiniciГіn PRIMARY KEY

Первичный ключ, PRIMARY KEY, идентифицирует способа Гєnica каждую линию таблицы.

Определенная колонна как основная первичная (PRIMARY KEY) должен будь быть UNIQUE (стоимость Гєnico) и NOT NULL (он не может содержать недействительную стоимость).

у Каждой таблицы sГіlo может быть первичный ключ (PRIMARY KEY).


у Тебя Есть ошибка в ней declaraciГіn признаков, у которых есть подмостки:

CREATE TABLE cancion(
    nombre VARCHAR(50), --debería ser PK
    artista SERIAL,
    duracion INT, 
    descargas_actuales INT, 
    anio_creacion INT,
    PRIMARY KEY(nombre, artista),
    CONSTRAINT fk_artista FOREIGN KEY(artista)
    REFERENCES artista(id)
)

EstГЎs, пробуя помещать nombre и артиста как PK, у тебя есть две ошибки в ней ранее ты не поместил в continuaciГіn признака

atributo VARCHAR(50) PRIMARY KEY

, Если он состоит в том, чтобы nombre, было pk, что pasarГ, - если ты пробуешь вводить две песни, у которых есть достижение имени, но принадлежит различному артисту?

INSERT INTO cancion ('Girls', 'Marina And The Diamonds',...)
INSERT INTO cancion ('Girls', 'Kid Kudi',...)

Существуют один montГіn песен, что имя - то же самое и это darГ - в ошибку, попробовав


Вторые

, если он состоит в том, чтобы он был артистом PK, которые происходят, если ты пробуешь создавать две песни, с различными именами и тем же артистом?

INSERT INTO cancion ('Encoder', 'Pendulum'...)
INSERT INTO cancion ('The Island', 'Pendulum'...)

Второй tambiГ©n darГ - в ошибку, из-за дублированного ключа.


Правильное serГ - в, помещать один пойдите авто-увеличительный, если он состоит в том, что ты это желаешь:

CREATE TABLE cancion(
        id_cancion INT IDENTITY(1,1) PRIMARY KEY, -- aumenta 1 en 1
        nombre VARCHAR(50),
        artista SERIAL,
        duracion INT, 
        descargas_actuales INT, 
        anio_creacion INT,
        PRIMARY KEY(id_cancion),
        CONSTRAINT fk_artista FOREIGN KEY(artista)
        REFERENCES artista(id)
    )
0
ответ дан 01.12.2019, 10:34