1

Temat: Liga Piłkarska, problem z tabelami

Ostatnio edytowany przez Konrad Stepinski (2014-06-05 07:27:03)

2

Odp: Liga Piłkarska, problem z tabelami

Nie skupiałem sie na analizowaniu sensu twojej bazy a tylko poprawiłem błędy składni ale na twoim miejscu poczytał bym o kluczach obcych a zwłaszcza co oznacza i jak działa klauzula "ON UPDATE CASCADE ON DELETE CASCADE"

SET client_encoding='utf-8';

CREATE TABLE klub
(
    id_klub            CHAR(6),
    rok_powstania      INT not null,
    nazwa              VARCHAR(32) not null,
    adres              VARCHAR(40) not null,
    wlasciciel         VARCHAR(40) not null,
    CONSTRAINT         klub_id_klub_pk PRIMARY KEY(id_klub)
);
---------------------------------------------------------
CREATE TABLE gosc
(
    id_gosc            CHAR(6),
    CONSTRAINT         gosc_id_gosc_pk PRIMARY KEY(id_gosc)
);
---------------------------------------------------------
CREATE TABLE gospodarz
(
    id_gospodarz       CHAR(6),
    CONSTRAINT         gospodarz_id_gospodarz_pk PRIMARY KEY(id_gospodarz)
);
---------------------------------------------------------
CREATE TABLE mecz
(
    id_mecz            CHAR(6),
    gosc_k             CHAR(6) not null,
    id_gospodarz       CHAR(6) not null,
    widownia           INT not null,
    kolejka            INT not null,
    data               DATE not null,
    wynik_do_przerwy   CHAR(5) not null,
    wynik_koncowy      CHAR(5) not null,
    CONSTRAINT         mecz_id_mecz_pk PRIMARY KEY(id_mecz),
    CONSTRAINT         mecz_gosc_k_fk FOREIGN KEY(gosc_k)             REFERENCES gosc(id_gosc) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT         mecz_id_gospodarz_fk FOREIGN KEY(id_gospodarz)  REFERENCES gospodarz(id_gospodarz) ON UPDATE CASCADE ON DELETE CASCADE
);
---------------------------------------------------------
CREATE TABLE sedzia
(
    id_sedzia          CHAR(6) not null,
    imie               VARCHAR(32) not null,
    nazwisko           VARCHAR(32) not null,
    miasto             VARCHAR(25) not null,
    CONSTRAINT         sedzia_id_sedzia_pk PRIMARY KEY(id_sedzia)
);
---------------------------------------------------------
CREATE TABLE pilkarz
(
    id_pilkarz         CHAR(6),
    imie               VARCHAR(32) not null,
    nazwisko           VARCHAR(32) not null,
    pozycja            VARCHAR(3) not null,
    CONSTRAINT         pilkarz_id_pilkarz_pk PRIMARY KEY(id_pilkarz)
);
---------------------------------------------------------
CREATE TABLE statystyki
(
    id_statystyki      CHAR(6),
    pilkarz_id         CHAR(6) not null,
    rodzaj             VARCHAR(15) not null,
    liczba             INT not null,
    id_meczu           CHAR(6) not null,
    CONSTRAINT         statystyki_id_statystyki_pk PRIMARY KEY(id_statystyki),
    CONSTRAINT         pilkarz_fk FOREIGN KEY(pilkarz_id) REFERENCES pilkarz(id_pilkarz)
);
---------------------------------------------------------
CREATE TABLE mecz_sedzia
(
    id_sedzia        CHAR(6) not null,
    id_mecz          CHAR(6) not null,
    CONSTRAINT       mecz_sedzia_id_sedzia_fk FOREIGN KEY(id_sedzia) REFERENCES sedzia(id_sedzia) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT       mecz_sedzia_id_mecz_fk FOREIGN KEY(id_mecz)     REFERENCES mecz(id_mecz)     ON UPDATE CASCADE ON DELETE CASCADE
);
---------------------------------------------------------
CREATE TABLE mecz_pilkarz
(
    id_pilkarz        CHAR(6) not null,
    id_mecz           CHAR(6) not null,
    CONSTRAINT        mecz_pilkarz_id_pilkarz_fk FOREIGN KEY(id_pilkarz)  REFERENCES pilkarz(id_pilkarz) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT        mecz_pilkarz_id_mecz_fk    FOREIGN KEY(id_mecz)     REFERENCES mecz(id_mecz)       ON UPDATE CASCADE ON DELETE CASCADE
);

3

Odp: Liga Piłkarska, problem z tabelami

Ogolnie zeby powiazac tabele pilkarz z tabela klub, to musze to zrobic jakos poprzez tabele mecz ? Zaraz poczytam o tym "ON UPDATE CASCADE ON DELETE CASCADE" bo przyznam ze wrzucilem to troche na pale. Oczywiscie dzieki za poprawienie tych bledow,bo teraz tabele wczytuja sie bez zarzutu smile . Wezme sie za inserty i zobacze jak te rozne SELECT'y beda dzialac lub nie dzialac ( zapewne to drugie ) tu takie przykladowe wykazy ktore moze zawierac:

"historia występów zawodnika, stan rozgrywek (liczba punktów w sezonie), najbardziej skuteczni strzelcy" , o ile najskuteczniejszy strzelec to nie problem, o tyle historia wystepow czy stan rozgrywek pewnie bede musial te tabele inaczej skonstruowac

Ostatnio edytowany przez Konrad Stepinski (2014-06-05 14:08:23)

4

Odp: Liga Piłkarska, problem z tabelami

SET client_encoding='utf-8';

CREATE TABLE klub
(
    id_klub            CHAR(6),
    nazwa              VARCHAR(32) not null,   
    rok_powstania      INT not null,
    stadion            VARCHAR(40) not null,
    trener             VARCHAR(40) not null,
    CONSTRAINT         klub_id_klub_pk PRIMARY KEY(id_klub)
);
---------------------------------------------------------
CREATE TABLE gosc
(
    id_gosc            CHAR(6),
    CONSTRAINT         gosc_id_gosc_pk PRIMARY KEY(id_gosc),
    CONSTRAINT           gosc_id_gosc_fk FOREIGN KEY(id_gosc) REFERENCES klub(id_klub)
                 ON UPDATE CASCADE ON DELETE CASCADE
);
---------------------------------------------------------
CREATE TABLE gospodarz
(
    id_gospodarz       CHAR(6),
    CONSTRAINT         gospodarz_id_gospodarz_pk PRIMARY KEY(id_gospodarz),
    CONSTRAINT           gospodarz_id_gospodarz_fk FOREIGN KEY(id_gospodarz) REFERENCES klub(id_klub)
                ON UPDATE CASCADE ON DELETE CASCADE
);
---------------------------------------------------------
CREATE TABLE mecz
(
    kolejka            INT not null,   
    id_gospodarz       CHAR(6) not null,
    gosc_k             CHAR(6) not null,
    widownia           INT not null,
    id_mecz            CHAR(6),
    data               DATE not null,
    wynik              CHAR(15) not null,
    CONSTRAINT         mecz_id_mecz_pk PRIMARY KEY(id_mecz),
    CONSTRAINT         mecz_gosc_k_fk FOREIGN KEY(gosc_k)  REFERENCES gosc(id_gosc)
                    ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT         mecz_id_gospodarz_fk FOREIGN KEY(id_gospodarz)  REFERENCES gospodarz(id_gospodarz)           ON UPDATE CASCADE ON DELETE CASCADE
);
---------------------------------------------------------
CREATE TABLE sedzia
(
    id_sedzia          CHAR(6) not null,
    imie               VARCHAR(32) not null,
    nazwisko           VARCHAR(32) not null,
    miasto             VARCHAR(25) not null,
    rodzaj           VARCHAR(25) not null,
    CONSTRAINT         sedzia_id_sedzia_pk PRIMARY KEY(id_sedzia)
);
---------------------------------------------------------
CREATE TABLE pilkarz
(
    id_pilkarz         CHAR(6),
    imie               VARCHAR(32) not null,
    nazwisko           VARCHAR(32) not null,
    pozycja            VARCHAR(3) not null,
    CONSTRAINT         pilkarz_id_pilkarz_pk PRIMARY KEY(id_pilkarz)
);
---------------------------------------------------------
CREATE TABLE statystyki
(
    id_statystyki      CHAR(6),
    pilkarz_id         CHAR(6) not null,
    rodzaj             VARCHAR(15) not null,
    liczba             INT not null,
    id_meczu           CHAR(6) not null,
    CONSTRAINT         statystyki_id_statystyki_pk PRIMARY KEY(id_statystyki),
    CONSTRAINT         pilkarz_fk FOREIGN KEY(pilkarz_id) REFERENCES pilkarz(id_pilkarz)
);
---------------------------------------------------------
CREATE TABLE mecz_sedzia
(
    id_sedzia        CHAR(6) not null,
    id_mecz          CHAR(6) not null,
    CONSTRAINT       mecz_sedzia_id_sedzia_fk FOREIGN KEY(id_sedzia) REFERENCES sedzia(id_sedzia) ON                 UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT       mecz_sedzia_id_mecz_fk FOREIGN KEY(id_mecz)     REFERENCES mecz(id_mecz)     ON                 UPDATE CASCADE ON DELETE CASCADE
);
---------------------------------------------------------
CREATE TABLE mecz_pilkarz
(
    id_pilkarz        CHAR(6) not null,
    id_mecz           CHAR(6) not null,
    CONSTRAINT        mecz_pilkarz_id_pilkarz_fk FOREIGN KEY(id_pilkarz)  REFERENCES pilkarz(id_pilkarz)         ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT        mecz_pilkarz_id_mecz_fk    FOREIGN KEY(id_mecz)     REFERENCES mecz(id_mecz)           ON UPDATE CASCADE ON DELETE CASCADE
);

DROP TABLE mecz_pilkarz;
DROP TABLE mecz_sedzia;
DROP TABLE mecz;
DROP TABLE sedzia;
DROP TABLE statystyki;
DROP TABLE pilkarz;
DROP TABLE gospodarz;
DROP TABLE gosc;
DROP TABLE klub;

I nie wiem czy na podstawie tych tabel,ktore do tej pory stworzylem jest mozliwosc wskazania w jakim klubie gra jaki pilkarz, na bank mam zle tabele gospodarz i gosc. Zastanawiam sie w jaki sposob zrobic to tak, ze strzelone gole w danym spotkaniu bylyby jednoczesnie przypisywane do danego pilkarza.