![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 550 Pomógł: 9 Dołączył: 29.05.2009 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Witam,
zastanawiam się jak zrobić w bazie danych zbieranie daty ogłoszenia w gazecie. Jeden klient może zajerestrować ogłoszenie, które pojawia się nie tylko w jednym dniu, ale w kliku dniach bądź tygodniu. Zastanawiam się jak to zrobić w bazie. Pewnie będę musiał stworzyć osobną tabelę powiedzmy daty_ogłoszenia. I dla każdej daty osobny rekord? Czyli coś na styl: -id -klient_id -data_ogloszenia Klient wybiera date pojawienia się ogłoszenia 10-03-2013 i 11-03-2013. Dane zostają zapisane w ten sposób. id--klient_id--data_ogloszenia 1------4----------10-03-2013 2------4----------11-03-2013 Czy może macie inna propozycje? Ten post edytował cykcykacz 11.03.2013, 09:45:52 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 325 Pomógł: 33 Dołączył: 31.05.2008 Ostrzeżenie: (0%) ![]() ![]() |
Zamiast klient_id dałbym ogłoszenie_id.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 550 Pomógł: 9 Dołączył: 29.05.2009 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Zrobiłem to w ten sposób, stworzyłem 3 tabele:
-klient -rejestracja_ogloszenia -data_emisji I połączyłem relacji jeden do wielu. Tak wygląda skrypt: CODE SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; CREATE SCHEMA IF NOT EXISTS `ogloszenia` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ; USE `ogloszenia` ; -- ----------------------------------------------------- -- Table `ogloszenia`.`Klient` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `ogloszenia`.`Klient` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(45) NOT NULL , `surname` VARCHAR(45) NOT NULL , `email` VARCHAR(45) NOT NULL , `address` VARCHAR(45) NOT NULL , `street` VARCHAR(45) NOT NULL , `phone` VARCHAR(12) NOT NULL , `post_code` VARCHAR(6) NOT NULL , `date` DATE NOT NULL , PRIMARY KEY (`id`) , UNIQUE INDEX `email_UNIQUE` (`email` ASC) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `ogloszenia`.`rejestracja_ogłoszenia` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `ogloszenia`.`rejestracja_ogłoszenia` ( `id` INT NOT NULL AUTO_INCREMENT , `Klient_id` INT NOT NULL , `text` TEXT NOT NULL , `rodzaj_ogłoszenia` VARCHAR(45) NOT NULL , `moduł` INT NOT NULL , `cena` DECIMAL(11,4) NOT NULL , PRIMARY KEY (`id`, `Klient_id`) , INDEX `fk_rejestracja_ogłoszenia_Klient_idx` (`Klient_id` ASC) , CONSTRAINT `fk_rejestracja_ogłoszenia_Klient` FOREIGN KEY (`Klient_id` ) REFERENCES `ogloszenia`.`Klient` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `ogloszenia`.`data_emisji` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `ogloszenia`.`data_emisji` ( `id` INT NOT NULL AUTO_INCREMENT , `rejestracja_ogłoszenia_id` INT NOT NULL , `data` DATE NOT NULL , PRIMARY KEY (`id`, `rejestracja_ogłoszenia_id`) , INDEX `fk_data_emisji_rejestracja_ogłoszenia1_idx` (`rejestracja_ogłoszenia_id` ASC) , CONSTRAINT `fk_data_emisji_rejestracja_ogłoszenia1` FOREIGN KEY (`rejestracja_ogłoszenia_id` ) REFERENCES `ogloszenia`.`rejestracja_ogłoszenia` (`id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; USE `ogloszenia` ; SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; Tak diagram: http://imageshack.us/photo/my-images/547/diagrameer.jpg Piszcie co myślicie czy mam jakieś rażące błędy itd. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 2.10.2025 - 16:30 |