Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[SQL] Usuwanie tabelek z bazy danych.

Kostek7 02 Gru 2009 23:01 5643 7
  • #1 02 Gru 2009 23:01
    Kostek7
    Poziom 27  

    Środowisko to M$ SQL Server Management Studio EE 2005. Mam ogromny problem z usunięciem wszystkich tabelek z mojej bazy danych.
    Tworzenie:

    Code:

    CREATE TABLE Obywatel
    (
       PESEL CHAR(11) PRIMARY KEY,
       Imie VARCHAR(30),
       Nazwisko VARCHAR(30),
       Imie_ojca VARCHAR(30),
       Imie_matki VARCHAR(30),
       Plec VARCHAR(1),
       Nazwisko_rodowec VARCHAR(30),
       Data_zgonu DATE 
    );

    CREATE TABLE Zameldowanie
    (
       Id INTEGER PRIMARY KEY,
       PESEL CHAR(11) REFERENCES Obywatel,
       Typ VARCHAR(1),
       Data_poczatku DATE,
       Data_konca DATE   
    );

    CREATE TABLE Adres
    (   
       Id INTEGER PRIMARY KEY,
       Id_zameldowanie INTEGER REFERENCES Zameldowanie,
       Ulica VARCHAR(30),
       Miasto VARCHAR(30),
       Kod_pocztowy VARCHAR(30),
       Poczta VARCHAR(30),
       Nr_domu INTEGER,
       Nr_mieszkania INTEGER
          
    );

    CREATE TABLE Malzenstwo
    (
       PESEL_M CHAR(11) REFERENCES Obywatel PRIMARY KEY,
       PESEL_K CHAR(11) REFERENCES Obywatel,
       Miejsce VARCHAR(30),
       Data_zawarcia DATE,
       Nr_aktu_slubu INTEGER
    );         

    CREATE TABLE Rozwod
    (
       Nr_aktu INTEGER PRIMARY KEY,
       PESEL_M CHAR(11) REFERENCES Malzenstwo,
       Data DATE,
       Powod VARCHAR(30)
    );

    CREATE TABLE Typ
    (
       Symbol VARCHAR(30) PRIMARY KEY,
       Nazwa  VARCHAR(30),
       Terminowosc VARCHAR(1)
    );

    CREATE TABLE Wniosek
    (
       Id INTEGER PRIMARY KEY,
       Symbol VARCHAR(30) REFERENCES Typ,
       Powod_zlozenia VARCHAR(30),
       Termin_zlozenia DATE     
    );

    CREATE TABLE Decyzja
    (
       Id_wniosku INTEGER REFERENCES Wniosek PRIMARY KEY,
       Postanowienia VARCHAR(150),
       Uzasadnienie  VARCHAR(150)
    );

    CREATE TABLE Dokument
    (
       Id INTEGER PRIMARY KEY,
       Symbol VARCHAR(30) REFERENCES Typ,
       Id_wniosku INTEGER REFERENCES Decyzja,
       Data_wydania DATE,
       Powod_wydania VARCHAR(150)       
    );

    CREATE TABLE Duplikat
    (
       Numer INTEGER PRIMARY KEY,
       Id INTEGER REFERENCES Dokument
    );

    CREATE TABLE Sklada
    (
       PESEL CHAR(11) REFERENCES Obywatel PRIMARY KEY,
       Id INTEGER REFERENCES Wniosek
    );


    CREATE TABLE Odbiera
    (
       PESEL CHAR(11) REFERENCES Obywatel PRIMARY KEY,
       Id INTEGER REFERENCES Dokument
    );


    Usuwanie
    Code:

    DROP TABLE Sklad;
    DROP TABLE Wniosek;
    DROP TABLE Typ;
    DROP TABLE Odbiera;
    DROP TABLE Duplikat;
    DROP TABLE Dokument;
    DROP TABLE Decyzja;
    DROP TABLE Rozwod;
    DROP TABLE Malzenstwo;         
    DROP TABLE Adres;
    DROP TABLE Zameldowanie;
    DROP TABLE Obywatel;

    Komunikat o błędzie:
    Code:

    Msg 3701, Level 11, State 5, Line 1
    Cannot drop the table 'Sklad', because it does not exist or you do not have permission.
    Msg 3726, Level 16, State 1, Line 2
    Could not drop object 'Wniosek' because it is referenced by a FOREIGN KEY constraint.
    Msg 3726, Level 16, State 1, Line 3
    Could not drop object 'Typ' because it is referenced by a FOREIGN KEY constraint.
    Msg 3726, Level 16, State 1, Line 12
    Could not drop object 'Obywatel' because it is referenced by a FOREIGN KEY constraint.

    Proszę o pomoc. Wiem że chodzi o kolejność operacji usuwania tabel, ale nie mogę znaleźć odpowiedniej kolejności komend :(

    0 7
  • Pomocny post
    #2 03 Gru 2009 01:59
    mf18
    Poziom 12  

    Witam, o ile się nie mylę, to w narzędziu, z którego korzystasz na podstawie kodu, który wkleiłeś można wygenerować graficzny podgląd utworzonych tabel i relacji między nimi. Usuwanie powinieneś zacząć od tabel, w których są klucze obce. Rozrysuj sobie schemat bazy wraz z powiązaniami. Jeśli masz np. tabelę A i tabelę B, które są powiązane relacją A --1:N---< B, to najpierw usuwasz tabelę B, a dopiero po niej A. Jeśli możesz, to wklej schemat, szybciej można rozwiązać Twój problem na jego podstawie, niż na przykładzie kodu...

    0
  • #4 03 Gru 2009 08:13
    Kostek7
    Poziom 27  

    Oto schemat:
    [SQL] Usuwanie tabelek z bazy danych.

    0
  • #5 03 Gru 2009 11:22
    gothye
    Poziom 33  

    hmm ,a czy masz uprawnienia w SQL do dropowania tabelek ?

    0
  • #6 03 Gru 2009 13:25
    Kostek7
    Poziom 27  

    Sądzę że tak ponieważ gdybym ich nie miał pewnie z ręki nie mógłbym ich usuwać, a z resztą uruchamiam program jako administrator na koncie administratora.

    0
  • #7 03 Gru 2009 14:07
    marcinj12
    Poziom 40  

    Tworzysz tabelę o nazwie "Sklada", usuwasz "Sklad" a na schemacie z tabelami w ogóle jej nie masz... To tłumaczy 1 komunikat. A resztę tak jak koledzy radzili - usuń najpierw tabele powiązane, a na końcu tabelę główną, albo spróbuj DROP TABLE nazwa_tabeli CASCADE lub coś w tym stylu.

    0
  • #8 03 Gru 2009 15:14
    Kostek7
    Poziom 27  

    OK, już doszedłem do mojego błędu :)
    Dziękuję za udzieloną mi w temacie pomoc!

    0