[SQL] sprawdzenie relacji


(troiP) #1

Witam

Proszę o sprawdzenie relacji

-- phpMyAdmin SQL Dump

-- version 2.11.7

-- http://www.phpmyadmin.net

--

-- Host: localhost

-- Czas wygenerowania: 28 Sty 2011, 02:51

-- Wersja serwera: 5.0.51

-- Wersja PHP: 5.2.6


SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


--

-- Baza danych: `uam`

--


-- --------------------------------------------------------


--

-- Struktura tabeli dla `klienci`

--


CREATE TABLE IF NOT EXISTS `klienci` (

  `id_klienta` int(20) NOT NULL,

  `imie` varchar(20) character set utf8 collate utf8_polish_ci NOT NULL,

  `nazwisko` varchar(20) character set utf8 collate utf8_polish_ci NOT NULL,

  `PESEL` char(11) character set utf8 collate utf8_polish_ci NOT NULL,

  PRIMARY KEY (`id_klienta`),

  UNIQUE KEY `PESEL` (`PESEL`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;


--

-- Zrzut danych tabeli `klienci`

--



-- --------------------------------------------------------


--

-- Struktura tabeli dla `pokoje`

--


CREATE TABLE IF NOT EXISTS `pokoje` (

  `id_pokoju` int(20) NOT NULL,

  `pietro` varchar(20) character set utf8 collate utf8_polish_ci NOT NULL,

  `id_typ` int(20) NOT NULL,

  PRIMARY KEY (`id_pokoju`),

  KEY `id_typ` (`id_typ`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;


--

-- Zrzut danych tabeli `pokoje`

--



-- --------------------------------------------------------


--

-- Struktura tabeli dla `rezerwacje`

--


CREATE TABLE IF NOT EXISTS `rezerwacje` (

  `id_rezerwacji` int(20) NOT NULL,

  `id_klienta` int(20) NOT NULL,

  `id_pokoju` int(20) NOT NULL,

  `cena` float NOT NULL,

  `data_rezerwacji` date NOT NULL,

  `data_przyjazdu` date NOT NULL,

  `data_wyjazdu` date NOT NULL,

  `id_status` int(1) NOT NULL,

  PRIMARY KEY (`id_rezerwacji`),

  KEY `id_klienta` (`id_klienta`),

  KEY `id_pokoju` (`id_pokoju`),

  KEY `id_status` (`id_status`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;


--

-- Zrzut danych tabeli `rezerwacje`

--



-- --------------------------------------------------------


--

-- Struktura tabeli dla `status`

--


CREATE TABLE IF NOT EXISTS `status` (

  `id_status` int(20) NOT NULL,

  `status` varchar(20) character set utf8 collate utf8_polish_ci NOT NULL,

  PRIMARY KEY (`id_status`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;


--

-- Zrzut danych tabeli `status`

--



-- --------------------------------------------------------


--

-- Struktura tabeli dla `typy pokoi`

--


CREATE TABLE IF NOT EXISTS `typy pokoi` (

  `id_typ` int(20) NOT NULL,

  `nazwa pokoju` varchar(20) character set utf8 collate utf8_polish_ci NOT NULL,

  `ilosc osob` int(1) NOT NULL,

  `ilosc lozek` int(1) NOT NULL,

  PRIMARY KEY (`id_typ`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;


--

-- Zrzut danych tabeli `typy pokoi`

--



--

-- Ograniczenia dla zrzutów tabel

--


--

-- Ograniczenia dla tabeli `rezerwacje`

--

ALTER TABLE `rezerwacje`

  ADD CONSTRAINT `rezerwacje_ibfk_9` FOREIGN KEY (`id_status`) REFERENCES `status` (`id_status`),

  ADD CONSTRAINT `rezerwacje_ibfk_7` FOREIGN KEY (`id_klienta`) REFERENCES `klienci` (`id_klienta`),

  ADD CONSTRAINT `rezerwacje_ibfk_8` FOREIGN KEY (`id_pokoju`) REFERENCES `pokoje` (`id_pokoju`);


--

-- Ograniczenia dla tabeli `typy pokoi`

--

ALTER TABLE `typy pokoi`

  ADD CONSTRAINT `typy pokoi_ibfk_1` FOREIGN KEY (`id_typ`) REFERENCES `pokoje` (`id_typ`);

Wykonane w phpmyadmin

A tak wygląda na obrazku

bazaws.jpg


(Martini M) #2

Witam,

Pod jakim kątem chciałbyś to sprawdzić?

Na logikę i po obejrzeniu diagramu wygląda dobrze. Nie ma niejasności.

Powodzenia


(troiP) #3

tak, właśnie o to chodziło, a jeszcze jedno pytanie, gdzie najlepiej umieścić CHECK i jak?


(mario@) #4

Jak dla mnie tabela status nie ma sensu(skoro status może przyjąć kilka wartości które z powodzeniem można zastąpić np. liczbami to po co do tego osobna tabela), dodatkowo nie podoba mi się kolumna cena w tabeli rezerwacja, która raczej powinna znajdować się w tabeli typy_pokoi jako opłata za jedną noc a w tabeli pokoje dasz dodatkowy mnożnik zależny od piętra/widoku(podaję przykłady abyś wiedział o co mi biega) dla konkretnego pokoju a cena w rezerwacja może zawierać już dokonaną opłatę(jeżeli to oznacza to i tak brakuje Ci danych o cenie za jedną noc - przykład podałem wcześniej). Oczywiście to tylko moje zdanie.