Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pierwsza baza - prośba o pomoc i wskazówki
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
poliocertes
Napisałem pierwszy raz coś, co miało być bazą na zaliczenie. Temat brzmiał: "ewidencja obecności i godzin pracy w małej firmie". To, co udało mi się napisać zamieszczam poniżej:

  1. DROP TABLE IF EXISTS pracownik;
  2. DROP TABLE IF EXISTS grafik;
  3. DROP TABLE IF EXISTS rodzaj_dnia;
  4. DROP TABLE IF EXISTS status_dnia_pracujacego;
  5.  
  6. -- ----------------------------------------------------------------------
  7. -- Tabela "pracownik"
  8. -- ----------------------------------------------------------------------
  9. CREATE TABLE pracownik
  10. (
  11. id varchar NOT NULL,
  12. imie char(15) NOT NULL,
  13. nazwisko char(25) NOT NULL,
  14. PRIMARY KEY (id)
  15. );
  16. -- ----------------------------------------------------------------------
  17. -- Tabela "status_dnia_pracujacego"
  18. -- ----------------------------------------------------------------------
  19. CREATE TABLE status_dnia_pracujacego
  20. (
  21. id varchar NOT NULL,
  22. pracowal char,
  23. urlop char,
  24. choroba char,
  25. nieobecnosc char,
  26. PRIMARY KEY (id)
  27. );
  28. -- ----------------------------------------------------------------------
  29. -- Tabela "rodzaj_dnia"
  30. -- ----------------------------------------------------------------------
  31. CREATE TABLE rodzaj_dnia
  32. (
  33. id text NOT NULL,
  34. pracujacy varchar,
  35. wolny bit,
  36. PRIMARY KEY (id),
  37. FOREIGN KEY (pracujacy) REFERENCES status_dnia_pracujacego (id)
  38. );
  39.  
  40. -- ----------------------------------------------------------------------
  41. -- Tabela "grafik"
  42. -- ----------------------------------------------------------------------
  43. CREATE TABLE grafik
  44. (
  45. id int NOT NULL,
  46. miesiac char NOT NULL,
  47. rok decimal NOT NULL,
  48. dzien text NOT NULL,
  49. czy_pracujacy char NOT NULL,
  50. osoba varchar NOT NULL,
  51. PRIMARY KEY (id),
  52. FOREIGN KEY ("dzien") REFERENCES "rodzaj_dnia" ("id"),
  53. FOREIGN KEY ("osoba") REFERENCES "pracownik" ("id")
  54.  
  55. );
  56.  
  57.  
  58. INSERT INTO pracownik (id,imie,nazwisko)VALUES
  59. ('1','Adam','Dankowski'),
  60. ('2','Bogdan','Nowak'),
  61. ('3','Cezary','Kowalski'),
  62. ('4','Dawid','Glinski'),
  63. ('5','Edward','Adamski'),
  64. ('6','Franciszek','Polski'),
  65. ('7','Grzegorz','Kowal');
  66.  
  67. INSERT INTO grafik (id,miesiac,rok,dzien,czy_pracujacy)VALUES
  68. ('1','styczen','2013','wtorek','0'),
  69. ('2','styczen','2013','sroda','1'),
  70. ('3','styczen','2013','czwartek','1'),
  71. ('4','styczen','2013','piatek','1'),
  72. ('5','styczen','2013','sobota','0'),
  73. ('6','styczen','2013','niedziela','0'),
  74. ('7','styczen','2013','poniedzialek','1'),
  75. ('8','styczen','2013','wtorek','1'),
  76. ('9','styczen','2013','sroda','1'),
  77. ('10','styczen','2013','czwartek','1'),
  78. ('11','styczen','2013','piatek','1'),
  79. ('12','styczen','2013','sobota','0'),
  80. ('13','styczen','2013','niedziela','0'),
  81. ('14','styczen','2013','poniedzialek','1'),
  82. ('15','styczen','2013','wtorek','1'),
  83. ('16','styczen','2013','sroda','1'),
  84. ('17','styczen','2013','czwartek','1'),
  85. ('18','styczen','2013','piatek','1'),
  86. ('19','styczen','2013','sobota','0'),
  87. ('20','styczen','2013','niedziela','0'),
  88. ('21','styczen','2013','poniedzialek','1'),
  89. ('22','styczen','2013','wtorek','1'),
  90. ('23','styczen','2013','sroda','1'),
  91. ('24','styczen','2013','czwartek','1'),
  92. ('25','styczen','2013','piatek','1'),
  93. ('26','styczen','2013','sobota','0'),
  94. ('27','styczen','2013','niedziela','0'),
  95. ('28','styczen','2013','poniedzialek','1'),
  96. ('29','styczen','2013','wtorek','1'),
  97. ('30','styczen','2013','sroda','1'),
  98. ('31','styczen','2013','czwartek','1');


Niestety pojawia się błąd:

BŁĄD: wartość zbyt długa dla typu znakowego (1)
Stan SQL: 22001

Jak można to naprawić? Ponadto proszę o wskazówki czy to się wogóle do czegokolwiek nadaje, a jesli tak to co można/trzeba poprawić.
tolomei
Witaj.

Zobacz. Ustawiłeś kolumnę miesiąc na typ char, czyli jeden znak. Chcesz wpisać więcej niż jeden znak a więc dostajesz błąd, że wartość jest zbyt długa dla typu znakowego.

  1. -- (...)
  2.  
  3. CREATE TABLE grafik
  4. (
  5. id int NOT NULL,
  6. miesiac char NOT NULL,
  7.  
  8. -- (...)
  9.  
  10. INSERT INTO grafik (id,miesiac,rok,dzien,czy_pracujacy)VALUES
  11. ('1','styczen','2013','wtorek','0'),
  12.  
  13. -- (...)


Pozdrawiam.
poliocertes
  1. DROP TABLE IF EXISTS podsumowanie;
  2. DROP TABLE IF EXISTS pracownicy;
  3. DROP TABLE IF EXISTS kalendarz;
  4. DROP TABLE IF EXISTS rodzaj_dnia;
  5. DROP TYPE IF EXISTS rodzaj;
  6. DROP TABLE IF EXISTS status_dnia;
  7. DROP TYPE IF EXISTS wariant;
  8.  
  9. CREATE TYPE wariant AS ENUM ('obecny','nieobecny','urlop','choroba');
  10. CREATE TABLE status_dnia(
  11. id_status_dnia serial NOT NULL,
  12. STATUS wariant NOT NULL,
  13. CONSTRAINT x1 PRIMARY KEY (id_status_dnia)
  14. );
  15.  
  16. CREATE TYPE rodzaj AS ENUM ('wolny','pracujacy');
  17. CREATE TABLE rodzaj_dnia(
  18. id_rodzaj_dnia serial NOT NULL,
  19. jaki_dzien rodzaj NOT NULL,
  20. CONSTRAINT x3 PRIMARY KEY (id_rodzaj_dnia),
  21. CONSTRAINT x4 FOREIGN KEY (id_rodzaj_dnia) REFERENCES status_dnia (id_status_dnia)
  22. );
  23.  
  24. CREATE TABLE kalendarz(
  25. id_kalendarz serial NOT NULL,
  26. rok integer NOT NULL ,
  27. miesiac varchar( 30 ) NOT NULL ,
  28. dzien integer NOT NULL,
  29. nazwa_dnia varchar NOT NULL,
  30. rodz_dnia integer NOT NULL,
  31. CONSTRAINT x5 PRIMARY KEY (id_kalendarz)
  32. );
  33.  
  34. CREATE TABLE pracownicy(
  35. id_pracownicy serial NOT NULL,
  36. imie varchar( 30 ) NOT NULL ,
  37. nazwisko varchar( 30 ) NOT NULL,
  38. CONSTRAINT x6 PRIMARY KEY (id_pracownicy)
  39. );
  40.  
  41. CREATE TABLE podsumowanie(
  42. id_podsumowanie serial NOT NULL,
  43. id_pracownik integer NOT NULL ,
  44. liczba_dni_pracujacych integer,
  45. liczba_dni_nieobecnosci integer,
  46. liczba_dni_urlopu integer,
  47. liczba_dni_zwolnienia integer,
  48. CONSTRAINT x7 PRIMARY KEY (id_podsumowanie)
  49. --CONSTRAINT x8 FOREIGN KEY (id_pracownik) references pracownicy (id_pracownicy),
  50. --CONSTRAINT x9 FOREIGN KEY (liczba_dni_pracujacych) references status_dnia (wariant),
  51. --CONSTRAINT x10 FOREIGN KEY (id_pracownik) references pracownicy (id_pracownicy),
  52. --CONSTRAINT x11 FOREIGN KEY (id_pracownik) references pracownicy (id_pracownicy)
  53. );
  54.  
  55. INSERT INTO kalendarz(rok,miesiac,dzien,nazwa_dnia,rodz_dnia)
  56. VALUES
  57. ('2013','maj','1','sroda','0'),
  58. ('2013','maj','2','czwartek','1'),
  59. ('2013','maj','3','piatek','0'),
  60. ('2013','maj','4','sobota','0'),
  61. ('2013','maj','5','niedziela','0'),
  62. ('2013','maj','6','poniedzialek','1'),
  63. ('2013','maj','7','wtorek','1'),
  64. ('2013','maj','8','sroda','1'),
  65. ('2013','maj','9','czwartek','1'),
  66. ('2013','maj','10','piatek','1'),
  67. ('2013','maj','11','sobota','0'),
  68. ('2013','maj','12','niedziela','0'),
  69. ('2013','maj','13','poniedzialek','1'),
  70. ('2013','maj','14','wtorek','1'),
  71. ('2013','maj','15','sroda','1'),
  72. ('2013','maj','16','czwartek','1'),
  73. ('2013','maj','17','piatek','1'),
  74. ('2013','maj','18','sobota','0'),
  75. ('2013','maj','19','niedziela','0'),
  76. ('2013','maj','20','poniedzialek','1'),
  77. ('2013','maj','21','wtorek','1'),
  78. ('2013','maj','22','sroda','1'),
  79. ('2013','maj','23','czwartek','1'),
  80. ('2013','maj','24','piatek','1'),
  81. ('2013','maj','25','sobota','0'),
  82. ('2013','maj','26','niedziela','0'),
  83. ('2013','maj','27','poniedzialek','1'),
  84. ('2013','maj','28','wtorek','1'),
  85. ('2013','maj','29','sroda','1'),
  86. ('2013','maj','30','czwartek','0'),
  87. ('2013','maj','31','piatek','1');
  88.  
  89. INSERT INTO pracownicy(nazwisko,imie)
  90. VALUES
  91. ('Dankowski','Adam'),
  92. ('Nowak','Bogdan'),
  93. ('Kowalski','Cezary'),
  94. ('Glinski','Dawid'),
  95. ('Adamski','Edward'),
  96. ('Polski','Franciszek'),
  97. ('Kowal','Grzegorz');


Udało mi się doprowadzić to wszytko do postaci jak powyżej. Błedów nie wyrzuca, ale nie wiem co dalej. Jak to połączyć w logiczną całość. Proszę o jakieś wskazówki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.