Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak skonstruować warunek, automatyczne przypisywanie, odwoływanie się do tabeli
kiprom
post 5.05.2012, 22:37:56
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 5.05.2012

Ostrzeżenie: (0%)
-----


witam wszystkich serdecznie. jestem trochę zielony z ORACLE SQL więc proszę o wyrozumiałość. potrzebuje przykładowych konstrukcji warunków które wymieniłem poniżej.

oto mój skrypt bazy danych(PONIŻEJ JEST CZĘŚĆ Z KLUCZAMI OBCYMI I GŁÓWNYMI -> MUSIAŁEM TROCHĘ SKRÓCIĆ POSTA)
  1. CREATE TABLE SIEDZIBY (
  2. ID_SIEDZIBY NUMBER(3),
  3. ULICA VARCHAR2(20));
  4.  
  5. CREATE TABLE WYDZIALY (
  6. ID_WYDZIALU NUMBER(2),
  7. NAZWA VARCHAR2(20),
  8. ID_SIEDZIBY NUMBER(3));
  9.  
  10. CREATE TABLE ETATY (
  11. ID_ETATU NUMBER(3),
  12. ETAT VARCHAR2(30));
  13.  
  14. CREATE TABLE PRACOWNICY (
  15. ID_PRACOWNIKA NUMBER(4),
  16. NAZWISKO VARCHAR2(15),
  17. IMIE VARCHAR2(15),
  18. DRUGIE_IMIE VARCHAR2(15),
  19. PESEL NUMBER (11),
  20. ID_ETATU NUMBER(3),
  21. ID_SZEFA NUMBER(4),
  22. DATA_ZATRUDNIENIA DATE,
  23. PENSJA NUMBER(7,2),
  24. PROWIZJA NUMBER(7,2),
  25. ID_WYDZIALU NUMBER(2));
  26.  
  27. CREATE TABLE POZIOMY_PENSJI (
  28. ID_POZIOMU NUMBER(3),
  29. DOLNA_GRANICA NUMBER(7,2),
  30. GORNA_GRANICA NUMBER(7,2));
  31.  
  32. CREATE TABLE WYROBY (
  33. ID_PRODUKTU NUMBER (6),
  34. NAZWA_PIWA VARCHAR2 (20),
  35. ILOSC_ALK NUMBER (2,1),
  36. EKSTRAKT NUMBER (2),
  37. KOMENTARZ VARCHAR2 (2000));
  38.  
  39. CREATE TABLE CENY (
  40. ID_PRODUKTU NUMBER (6),
  41. CENA_NETTO NUMBER (8,2),
  42. CENA_BRUTTO NUMBER (8,2),
  43. DATA_WYPRODUKOWANIA DATE,
  44. DATA_WYCOFANIA DATE);
  45.  
  46. CREATE TABLE KLIENCI (
  47. ID_KLIENTA NUMBER (6),
  48. NAZWA VARCHAR2 (45),
  49. ADRES VARCHAR2 (40),
  50. MIASTO VARCHAR2 (30),
  51. WOJEWODZTWO VARCHAR2 (15),
  52. KOD_POCZTOWY VARCHAR2 (9),
  53. NR_KIERUNKOWY NUMBER (3),
  54. TELEFON NUMBER (9),
  55. ID_PRACOWNIKA NUMBER (4));
  56.  
  57. CREATE TABLE ZAMOWIENIA (
  58. ID_ZAMOWIENIA NUMBER (4),
  59. DATA_ZAMOWIENIA DATE,
  60. ID_KLIENTA NUMBER (6),
  61. DATA_WYSYLKI DATE,
  62. WARTOSC NUMBER (8,2));
  63.  
  64. CREATE TABLE WIERSZE_ZAMOWIEN (
  65. ID_ZAMOWIENIA NUMBER (4),
  66. ID_WIERSZA_ZAM NUMBER (4),
  67. ID_PRODUKTU NUMBER (6),
  68. CENA NUMBER (8,2),
  69. ILOSC NUMBER (8),
  70. WARTOSC NUMBER (8,2));
  71.  
  72.  
  73.  
  74. /*OGRANICZENIA WYBORU TABELI KLIENCI*/
  75. ALTER TABLE KLIENCI ADD
  76. CHECK (ID_KLIENTA IS NOT NULL AND ID_KLIENTA > 0);
  77. ALTER TABLE KLIENCI ADD
  78. CHECK (ID_PRACOWNIKA IS NOT NULL AND ID_PRACOWNIKA > 0); /*ID_PRACOWNIKA =< PRACOWNICY.ID_PRACOWNIKA*/
  79. ALTER TABLE KLIENCI ADD
  80. CHECK (NAZWA IS NOT NULL);
  81. ALTER TABLE KLIENCI ADD
  82. CHECK (ADRES IS NOT NULL);
  83. ALTER TABLE KLIENCI ADD
  84. CHECK (MIASTO IS NOT NULL);
  85. ALTER TABLE KLIENCI ADD
  86. CHECK (NR_KIERUNKOWY IS NOT NULL AND NR_KIERUNKOWY >0);
  87. ALTER TABLE KLIENCI ADD
  88. CHECK (TELEFON IS NOT NULL AND TELEFON >=0); /*TELEFON >=0000000 (SIEDMIO LICZBOWY NR MINIMALNIE)*/
  89. ALTER TABLE KLIENCI ADD
  90. CHECK (WOJEWODZTWO IS NOT NULL);
  91. ALTER TABLE KLIENCI ADD
  92. CHECK (KOD_POCZTOWY IS NOT NULL AND KOD_POCZTOWY >0 ); /*KOD_POCZTOWY>=00000 (PIECIO LICZBOWY NR MINIMALNIE)*/
  93.  
  94. /*OGRANICZENIA WYBORU TABELI WYDZIALY*/
  95. ALTER TABLE WYDZIALY ADD
  96. CHECK (ID_WYDZIALU IS NOT NULL AND ID_WYDZIALU > 0);
  97. ALTER TABLE WYDZIALY ADD
  98. CHECK (NAZWA IS NOT NULL);
  99. ALTER TABLE WYDZIALY ADD
  100. CHECK (ID_SIEDZIBY IS NOT NULL AND ID_SIEDZIBY > 0); /*ID_SIEDZIBY =< SIEDZIBY.ID_SIEDZIBY*/
  101.  
  102. /*OGRANICZENIA WYBORU TABELI PRACOWNICY*/
  103. ALTER TABLE PRACOWNICY ADD
  104. CHECK (ID_PRACOWNIKA IS NOT NULL AND ID_PRACOWNIKA > 0);
  105. ALTER TABLE PRACOWNICY ADD
  106. CHECK (NAZWISKO IS NOT NULL);
  107. ALTER TABLE PRACOWNICY ADD
  108. CHECK (IMIE IS NOT NULL);
  109. ALTER TABLE PRACOWNICY ADD
  110. CHECK (DRUGIE_IMIE IS NOT NULL OR DRUGIE_IMIE IS NULL);
  111. ALTER TABLE PRACOWNICY ADD
  112. CHECK (ID_WYDZIALU IS NOT NULL AND ID_WYDZIALU > 0); /*ID_WYDZIALU =< WYDZIALY.ID_WYDZIALU*/
  113. ALTER TABLE PRACOWNICY ADD
  114. CHECK (PESEL IS NOT NULL); /*PESEL = 11*/
  115. ALTER TABLE PRACOWNICY ADD
  116. CHECK (ID_ETATU IS NOT NULL AND ID_ETATU > 0); /*ID_ETATU =< ETATY.ID_ETATU*/
  117. ALTER TABLE PRACOWNICY ADD
  118. CHECK (ID_SZEFA IS NOT NULL AND ID_SZEFA > 0); /*ID_SZEFA =< PRACOWNICY.ID_PRACOWNIKA*/
  119. ALTER TABLE PRACOWNICY ADD
  120. CHECK (DATA_ZATRUDNIENIA IS NOT NULL AND DATA_ZATRUDNIENIA >= TO_DATE('01/09/2003', 'DD/MM/YYYY'));
  121. ALTER TABLE PRACOWNICY ADD
  122. CHECK (PENSJA IS NOT NULL AND PENSJA >= 1500); /*PENSJA >=PENSJA.DOLNA_GRANICA AND PENSJA =<PENSJA.GORNA_GRANICA*/
  123. ALTER TABLE PRACOWNICY ADD
  124. CHECK (PROWIZJA IS NOT NULL OR PROWIZJA IN NULL);
  125. ALTER TABLE PRACOWNICY ADD
  126. CHECK (PROWIZJA > 0 AND PROWIZJA < 500);
  127.  
  128. /*OGRANICZENIA WYBORU TABELI WIERSZE_ZAMOWIEN*/
  129. ALTER TABLE WIERSZE_ZAMOWIEN ADD
  130. CHECK (ID_ZAMOWIENIA IS NOT NULL AND ID_ZAMOWIENIA >0); /*ID_ZAMOWIENIA =< ZAMOWIENIA.ID_ZAMOWIENIA*/
  131. ALTER TABLE WIERSZE_ZAMOWIEN ADD
  132. CHECK (ID_WIERSZA_ZAM IS NOT NULL AND ID_WIERSZA_ZAM >0);
  133. ALTER TABLE WIERSZE_ZAMOWIEN ADD
  134. CHECK (ID_PRODUKTU IS NOT NULL AND ID_PRODUKTU >0); /*ID_PRODUKTU =< WYROBY.ID_PRODUKTU*/
  135. ALTER TABLE WIERSZE_ZAMOWIEN ADD
  136. CHECK (CENA IS NOT NULL AND CENA >0.0 AND CENA<15.00); /*CENA=CENY.CENA_BRUTTO PRZYPISANE WARTOSCI AUTOMATYCZNE*/
  137. ALTER TABLE WIERSZE_ZAMOWIEN ADD
  138. CHECK (ILOSC IS NOT NULL AND ILOSC >0);
  139. ALTER TABLE WIERSZE_ZAMOWIEN ADD
  140. CHECK (WARTOSC IS NOT NULL AND WARTOSC=CENA*ILOSC);
  141.  
  142. /*OGRANICZENIA WYBORU TABELI ETATY*/
  143. ALTER TABLE ETATY ADD
  144. CHECK (ID_ETATU IS NOT NULL AND ID_ETATU > 0);
  145. ALTER TABLE ETATY ADD
  146. CHECK (ETAT IS NOT NULL);
  147.  
  148. /*OGRANICZENIA WYBORU TABELI SIEDZIBY*/
  149. ALTER TABLE SIEDZIBY ADD
  150. CHECK (ID_SIEDZIBY IS NOT NULL AND ID_SIEDZIBY > 0);
  151. ALTER TABLE SIEDZIBY ADD
  152. CHECK (ULICA IS NOT NULL);
  153.  
  154. /*OGRANICZENIA WYBORU TABELI CENY*/
  155. ALTER TABLE CENY ADD
  156. CHECK (ID_PRODUKTU IS NOT NULL AND ID_PRODUKTU > 0); /*ID_PRODUKTU =< WYROBY.ID_PRODUKTU*/
  157. ALTER TABLE CENY ADD
  158. CHECK (DATA_WYPRODUKOWANIA IS NOT NULL);
  159. ALTER TABLE CENY ADD
  160. CHECK (CENA_NETTO > 0 AND CENA_BRUTTO > 0);
  161. ALTER TABLE CENY ADD
  162. CHECK (CENA_BRUTTO=CENA_NETTO*1.23);
  163. ALTER TABLE CENY ADD
  164. CHECK (CENA_NETTO IS NULL OR CENA_BRUTTO IS NULL OR CENA_NETTO <= CENA_BRUTTO);
  165. ALTER TABLE CENY ADD
  166. CHECK (DATA_WYCOFANIA IS NULL AND DATA_WYCOFANIA IS NOT NULL OR DATA_WYPRODUKOWANIA <= DATA_WYCOFANIA);
  167. ALTER TABLE CENY ADD
  168. CHECK (DATA_WYCOFANIA >=TO_DATE('01/01/2012', 'DD/MM/YYYY') AND DATA_WYPRODUKOWANIA >=TO_DATE('01/01/2012', 'DD/MM/YYYY') );
  169.  
  170. /*OGRANICZENIA WYBORU TABELI WYROBY*/
  171. ALTER TABLE WYROBY ADD
  172. CHECK (ID_PRODUKTU IS NOT NULL AND ID_PRODUKTU > 0);
  173. ALTER TABLE WYROBY ADD
  174. CHECK (NAZWA_PIWA IS NOT NULL);
  175. ALTER TABLE WYROBY ADD
  176. CHECK (ILOSC_ALK IS NOT NULL AND ILOSC_ALK >0.0);
  177. ALTER TABLE WYROBY ADD
  178. CHECK (EKSTRAKT IS NOT NULL AND EKSTRAKT >=10);
  179.  
  180. /*OGRANICZENIA WYBORU TABELI POZIOMY_PENSJI*/
  181. ALTER TABLE POZIOMY_PENSJI ADD
  182. CHECK (ID_POZIOMU IS NOT NULL AND ID_POZIOMU > 0);
  183. ALTER TABLE POZIOMY_PENSJI ADD
  184. CHECK (DOLNA_GRANICA >=1500.00 AND GORNA_GRANICA >=2000.00);
  185. /*ALTER TABLE POZIOMY_PENSJI ADD
  186.   CHECK (DOLNA_GRANICA =<3501.99 AND GORNA_GRANICA =<9999.99);*/
  187. ALTER TABLE POZIOMY_PENSJI ADD
  188. CHECK ((DOLNA_GRANICA IS NULL AND GORNA_GRANICA IS NOT NULL) OR (DOLNA_GRANICA IS NOT NULL AND GORNA_GRANICA IS NULL) OR (DOLNA_GRANICA <= GORNA_GRANICA));
  189.  
  190. /*OGRANICZENIA WYBORU TABELI ZAMOWIENIA*/
  191. ALTER TABLE ZAMOWIENIA ADD
  192. CHECK (ID_ZAMOWIENIA IS NOT NULL AND ID_ZAMOWIENIA > 0);
  193. ALTER TABLE ZAMOWIENIA ADD
  194. CHECK (ID_KLIENTA IS NOT NULL AND ID_KLIENTA >0); /*ID_KLIENTA =< KLIENCI.ID_KLIENTA*/
  195. ALTER TABLE ZAMOWIENIA ADD
  196. CHECK (DATA_ZAMOWIENIA >=TO_DATE('01/01/2012', 'DD/MM/YYYY') AND DATA_WYSYLKI >=TO_DATE('01/01/2012', 'DD/MM/YYYY'));
  197. ALTER TABLE ZAMOWIENIA ADD
  198. CHECK ((DATA_ZAMOWIENIA IS NOT NULL AND DATA_WYSYLKI IS NOT NULL) OR (DATA_WYSYLKI IS NULL) OR (DATA_ZAMOWIENIA>=DATA_WYSYLKI));
  199. ALTER TABLE ZAMOWIENIA ADD
  200. CHECK (WARTOSC >= 0); /*WARTOSC=WIERSZE_ZAMOWIEN.WARTOSC PRZYPISANE WARTOSCI AUTOMATYCZNE*/
  201.  


potrzebuje składni w warunkach (są zapisane jako komentarze). mianowicie:
1) jak skonstruować warunek który będzie odwoływał się do innej tabeli i nie będzie przekraczana jej wartość. przykład:
  1. ALTER TABLE ZAMOWIENIA ADD
  2. CHECK (ID_KLIENTA IS NOT NULL AND ID_KLIENTA >0); /*ID_KLIENTA =< KLIENCI.ID_KLIENTA*/

2)wartość obliczona w innej tabeli będzie przypisywana do atrybutu w innej tabeli z uwzględnieniem jednego zamowienia (id_zamowienia w tabeli wiersze_zamowienia) przykład:
  1. ALTER TABLE ZAMOWIENIA ADD
  2. CHECK (WARTOSC >= 0); /*WARTOSC=WIERSZE_ZAMOWIEN.WARTOSC PRZYPISANE WARTOSCI AUTOMATYCZNE*/

3) przypisanie wartości z innej tabeli automatyczne. przykład:
  1. ALTER TABLE WIERSZE_ZAMOWIEN ADD
  2. CHECK (CENA IS NOT NULL AND CENA >0.0 AND CENA<15.00); /*CENA=CENY.CENA_BRUTTO PRZYPISANE WARTOSCI AUTOMATYCZNE*/

4) wpisanie dokładnie takiej ilości znaków jaka jest podana np w peselu. przykład:
  1. ALTER TABLE PRACOWNICY ADD
  2. CHECK (PESEL IS NOT NULL); /*PESEL = 11*/

5) proszę o poprawienie składni bo wywala mi błąd :mad:
  1. ALTER TABLE POZIOMY_PENSJI ADD
  2. CHECK (DOLNA_GRANICA =<3501.99 AND GORNA_GRANICA =<9999.99);


bardzo proszę o pomoc. jest to projekt na zaliczenie przedmiotu na studiach. z góry dziękuje wszyskim za pomoc:-D

TUTAJ ZNAJDUJĄ SIĘ KLUCZE GŁÓWNE I OBCE
  1. /*KLUCZE PODSTAWOWE*/
  2. ALTER TABLE KLIENCI ADD
  3. PRIMARY KEY (ID_KLIENTA);
  4. ALTER TABLE WYDZIALY ADD
  5. PRIMARY KEY (ID_WYDZIALU);
  6. ALTER TABLE PRACOWNICY ADD
  7. PRIMARY KEY (ID_PRACOWNIKA);
  8. ALTER TABLE WIERSZE_ZAMOWIEN ADD
  9. PRIMARY KEY (ID_ZAMOWIENIA, ID_WIERSZA_ZAM);
  10. ALTER TABLE ETATY ADD
  11. PRIMARY KEY (ID_ETATU);
  12. ALTER TABLE SIEDZIBY ADD
  13. PRIMARY KEY (ID_SIEDZIBY);
  14. ALTER TABLE CENY ADD
  15. PRIMARY KEY (ID_PRODUKTU, DATA_WYPRODUKOWANIA);
  16. ALTER TABLE WYROBY ADD
  17. PRIMARY KEY (ID_PRODUKTU);
  18. ALTER TABLE POZIOMY_PENSJI ADD
  19. PRIMARY KEY (ID_POZIOMU);
  20. ALTER TABLE ZAMOWIENIA ADD
  21. PRIMARY KEY (ID_ZAMOWIENIA);
  22.  
  23. /*KLUCZE OBCE*/
  24. ALTER TABLE KLIENCI ADD
  25. FOREIGN KEY (ID_PRACOWNIKA) REFERENCES PRACOWNICY;
  26. ALTER TABLE WYDZIALY ADD
  27. FOREIGN KEY (ID_SIEDZIBY) REFERENCES SIEDZIBY;
  28. ALTER TABLE PRACOWNICY ADD
  29. FOREIGN KEY (ID_ETATU) REFERENCES ETATY;
  30. ALTER TABLE PRACOWNICY ADD
  31. FOREIGN KEY (ID_SZEFA) REFERENCES PRACOWNICY;
  32. ALTER TABLE PRACOWNICY ADD
  33. FOREIGN KEY (ID_WYDZIALU) REFERENCES WYDZIALY;
  34. ALTER TABLE WIERSZE_ZAMOWIEN ADD
  35. FOREIGN KEY (ID_ZAMOWIENIA) REFERENCES ZAMOWIENIA;
  36. ALTER TABLE WIERSZE_ZAMOWIEN ADD
  37. FOREIGN KEY (ID_PRODUKTU) REFERENCES WYROBY;
  38. ALTER TABLE CENY ADD
  39. FOREIGN KEY (ID_PRODUKTU) REFERENCES WYROBY;
  40. ALTER TABLE ZAMOWIENIA ADD
  41. FOREIGN KEY (ID_KLIENTA) REFERENCES KLIENCI;
  42.  
  43. exit;
  44.  


Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.04.2024 - 02:29