SQL SMS - ошибка - в базе данных уже есть объект с именем «жанр» - PullRequest
1 голос
/ 04 ноября 2011

Я пытаюсь создать гипотетическую базу данных видеомагазина, и это сообщение об ошибке появляется каждый раз, когда я выполняю этот запрос:

DROP DATABASE videostore
CREATE DATABASE videostore

CREATE TABLE genre
(
  genre_id INT NOT NULL PRIMARY KEY IDENTITY,
  genre_name VARCHAR(15) NOT NULL
);

CREATE TABLE classification
(    
  rating    VARCHAR(2) NOT NULL CONSTRAINT classification_pk PRIMARY KEY,
  description    VARCHAR(100) NOT NULL,    
  minimum_age    INT    NULL,
);

CREATE TABLE format

(    
  format_id    INT    NOT NULL CONSTRAINT format_pk PRIMARY KEY IDENTITY,
  format_name    VARCHAR(8)    NOT NULL,        
  purchase_cost    FLOAT    NOT NULL
);        

CREATE TABLE rental_cost
(    
  rental_cost_id    INT    NOT NULL CONSTRAINT rental_cost_pk PRIMARY KEY IDENTITY,
  rental_name    VARCHAR(15)    NOT NULL,
  rental_cost    FLOAT    NOT NULL,
  rental_days    TINYINT    NOT NULL    
);        

CREATE TABLE customer    
(    
  customer_id    INT    NOT NULL CONSTRAINT customer_pk PRIMARY KEY IDENTITY,
  first_name    VARCHAR(20)    NOT NULL,        
  surname    VARCHAR(20)    NOT NULL,        
  dob    DATETIME    NOT NULL,        
  home_address    VARCHAR(50)    NOT NULL,        
  contact_number    VARCHAR(10)    NOT NULL,        
  referrer_id    INT    NULL    FOREIGN KEY REFERENCES customer(customer_id),    
);

CREATE TABLE movie    

(    
  movie_id    INT    NOT NULL CONSTRAINT movie_pk PRIMARY KEY IDENTITY,
  movie_name    VARCHAR(40)    NOT NULL,        
  year    SMALLINT    NOT NULL,        
  duration    SMALLINT    NULL,         
  descrip    VARCHAR(120)    NULL,         
  classification    VARCHAR(2)    NOT NULL    FOREIGN KEY REFERENCES classification(rating),
  rental_cost_id    INT    NOT NULL    FOREIGN KEY REFERENCES rental_cost(rental_cost_id),    
);

CREATE TABLE copy
(    
  copy_id    INT    NOT NULL    CONSTRAINT copy_pk PRIMARY KEY    IDENTITY,
  movie_id    INT    NOT NULL    FOREIGN KEY REFERENCES movie(movie_id),    
  format_id    INT    NOT NULL    FOREIGN KEY REFERENCES format(format_id),    
);

CREATE TABLE rental
(    
  rental_id    INT    NOT NULL CONSTRAINT rental_pk PRIMARY KEY IDENTITY,
  copy_id    INT    NOT NULL    FOREIGN KEY REFERENCES copy(copy_id),    
  customer_id    INT    NOT NULL    FOREIGN KEY REFERENCES customer(customer_id),    
  rental_date    DATETIME    NOT NULL,        
  return_date    DATETIME    NULL        
);

CREATE TABLE genre_movie                

(    
  genre_id    INT    NOT NULL FOREIGN KEY REFERENCES genre(genre_id),    
  movie_id    INT    NOT NULL FOREIGN KEY REFERENCES movie(movie_id),
  CONSTRAINT genre_movie_pk PRIMARY KEY (genre_id, movie_id)
);    

(Извините, в неправильном формате для чтения сценария с легкостью, япросто не могу понять, как это сделать.)

В основном, когда я выполняю сценарий SQL, он говорит мне, что объектный "жанр" уже существует, но я не вижу его нигде в своем коде,И таблица еще не должна существовать, потому что я удаляю базу данных каждый раз, когда выполняется скрипт, верно?

Sidenote - если есть лучший способ сделать так, чтобы база данных удалялась, только если она существует, помогите мне сэто также.

Цени это.

Ответы [ 3 ]

1 голос
/ 04 ноября 2011

Я думаю, вам нужно добавить USE videostore после CREATE DATABASE videostore.В противном случае вы создаете таблицы в любой базе данных, в которой вы находитесь.

0 голосов
/ 04 ноября 2011

Обычно лучше выполнять SQL-операторы, когда это необходимо - попробуйте:

DROP DATABASE videostore
GO

CREATE DATABASE videostore
GO

USE videostore
CREATE TABLE genre
(
  genre_id INT NOT NULL PRIMARY KEY IDENTITY,
  genre_name VARCHAR(15) NOT NULL
);
GO

и т.д.

0 голосов
/ 04 ноября 2011

Я думаю, вы выполняете это в контексте базы данных master.Если вы проверите его, вы, вероятно, увидите, что все ваши таблицы на самом деле находятся в master.

Измените первую часть на эту:

DROP DATABASE videostore
CREATE DATABASE videostore

USE videostore

CREATE TABLE genre
...