У меня проблема с созданием таблицы отношений, ошибка будет следующей: не существует уникального ограничения, соответствующего столбцам в таблице, именуемой «песня». Проблема в том, что для отношений «песня» это ограничение дает мне: песни идентифицируются по имени и по исполнителю, который их зарегистрировал, это имя также 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)
)
Заранее спасибо!
Первичный ключ,
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)
)