[ zeko_sisko @ 04.10.2011. 18:34 ] @
Problem je u sledecem.
Hocu da napravim dvije tabele koje imaju identicne kolone, s tim da u prvoj tabeli, koja sadrzi kolonu id_zap koja je primarni kljuc, mogu uci samo vrijednosti tipa int koje su manje od 100. Slicno tome, da u drugu tabelu, u kolonu id_zap mogu uci samo vrijednosti vece od 99. Evo jednog dijela koda:

Code:
CREATE TABLE odjeljenja (
  sif_odj char(5) NOT NULL,
  naziv_odj varchar(20) NOT NULL,
  PRIMARY KEY (sif_odj)
);

CREATE TABLE zaposleni1 (
  id_zap smallint(5) NOT NULL,
  ime varchar(20) NOT NULL,
  prezime varchar(25) NOT NULL,
  sif_odj char(5),
  plata double(10,2),
  CHECK (id_zap>0 AND id_zap<100),
  PRIMARY KEY (id_zap),
  FOREIGN KEY (sif_odj) REFERENCES odjeljenja (sif_odj) on delete restrict
);

CREATE TABLE zaposleni2 (
  id_zap smallint(5) NOT NULL,
  ime varchar(20) NOT NULL,
  prezime varchar(25) NOT NULL,
  sif_odj char(5),
  plata double(10,2),
  CHECK (id_zap>99 AND id_zap<1000),
  PRIMARY KEY (id_zap),
  FOREIGN KEY (sif_odj) REFERENCES odjeljenja (sif_odj) on delete restrict
);


Ja uredno kreiram tabele, ali problem se javi prilikom unosa. Npr., ja mogu unijeti vrstu (100, 'Marko', 'Markovic', 'o1', 10000) u tabelu zaposleni1, iako ona ima ogranicenje da ne moze imati veci broj od 99. Znam da mi nesto fali, ali nemam pojma sta.

elem: koristio sam i komandu CHECK sa BETWEEN i AND, ali isto nije moglo.
[ bogdan.kecman @ 04.10.2011. 23:37 ] @
Citat:
Create Table Syntax:
...
The CHECK clause is parsed but ignored by all storage engines. See Section 1.8.5.4, “Foreign Key Differences”.
...


ako hoces da implementiras taj check moraces da koristis trigere
[ Shinhan @ 05.10.2011. 08:01 ] @
Vidi Partitioning.
[ zeko_sisko @ 05.10.2011. 14:28 ] @
Moj glavni problem je u sledecem. Ja trebam da kreiram pogled koji se zasniva na operatoru UNION ALL. E sada, da bi se preko tog pogleda mogla azurirati baza(umetanje ne moze, ali moze brisanje i azuriranje u uzem smislu mogu), taj pogled mora biti particionisan, tj. sadrzati bar jednu kolonu koja je particionisana da bi se moglo odrediti iz koje tabele tacno vodi odredjeni podatak. Npr., ja izvrsim sledeci kod:

Code:
create view unija
as
select * from zaposleni1
union all
select * from zaposleni2


Ovim kreiram pogled Unija, ali ne mogu izvrsiti nijednu od opcija azuriranja.
[ bogdan.kecman @ 05.10.2011. 16:08 ] @
a zasto radis modifikaciju kroz view. MySQL nije baza u kojoj je to normalno moguce. Nparavi stored procedure ili nesto slicno
[ zeko_sisko @ 05.10.2011. 16:30 ] @
Mene konkretno interesuju pogledi i azuriranje baze podatak preko pogleda. Naime, na nekom primjeru trebam objasniti azuriranje baze preko pogleda. Odradio sam i objasnio auzuriranje preko selekcije, projekcije, raznih spajanja, ali mi ne ide ovo sa azuriranjem preko unije, tj. preko operatora UNION ALL.
[ bogdan.kecman @ 05.10.2011. 16:51 ] @
kao sto rekoh to na MySQL NE MOZE!

http://dev.mysql.com/doc/refman/5.0/en/view-updatability.html
http://dev.mysql.com/doc/refman/5.5/en/view-updatability.html

Citat:

There are also certain other constructs that make a view nonupdatable. To be more specific, a view is not updatable if it contains any of the following:

Aggregate functions (SUM(), MIN(), MAX(), COUNT(), and so forth)

DISTINCT

GROUP BY

HAVING

UNION or UNION ALL

Subquery in the select list

Certain joins (see additional join discussion later in this section)

Nonupdatable view in the FROM clause

A subquery in the WHERE clause that refers to a table in the FROM clause

Refers only to literal values (in this case, there is no underlying table to update)

Uses ALGORITHM = TEMPTABLE (use of a temporary table always makes a view nonupdatable)

Multiple references to any column of a base table.


[ zeko_sisko @ 05.10.2011. 16:55 ] @
Da, to sam i ja nasao. Medjutim, u nekim drugim knjigama, stoji da moze. Mada, vise nisam ni siguran da li se to odnosilo samo na SQL ili na MySQL. Tebi u svakom slucaju hvala na pomoci.

Pozdrav
[ bogdan.kecman @ 05.10.2011. 17:17 ] @
SQL standard podrzava update preko view-a ako postoji 1:1 relacija. MySQL (kao i vecina db servera, ukljucujuci i ms sql server, oracle i razne druge) ima limite koji su striktniji od SQL standarda.

SQL standard dozvoljava update preko view-a koji je UNION ALL. DB2 na primer moze ali ima neke limite (ne radi neke optimizacije kada radis update kroz view), Oracle moze (nisam probao ali se secam da moze posto sam imao skoro klijenta koji je radio portovanje sa orakla na mysql pa mu je to bio problem) .. MSSQL, PgSQL i ostali - nemam pojma da li mogu ili ne ali to ti je lako da probas.. dodatno imas onaj "generalni" SQL forum ovde na ES-u gde imas ljude sa super mnogo iskustva sa raznim bazama .. pa mogu verovatno da ti probaju sve zivo de radi a de ne