CREATE TABLE i CONSTRAINTy
plewas - 16-02-2006 10:05
CREATE TABLE i CONSTRAINTy
Witam, Tak sie zastanawiam czy jest sens wpisywac wszelkie ograniczenia dla pol np. CREATE TABLE employee ( emp_id serial CONSTRAINT pk_emp_id PRIMARY KEY, emp_fname varchar(12) NOT NULL CONSTRAINT emp_fname_not_empty CHECK (emp_fname <> ''), emp_lname varchar(15) NOT NULL CONSTRAINT emp_lname_not_empty CHECK (emp_lname <> ''), emp_department char(3) NOT NULL CONSTRAINT emp_department_not_empty CHECK (emp_department <> '') CONSTRAINT fk_emp_department REFERENCES departments(dep_code), CONSTRAINT employee_fname_lname_unique UNIQUE(emp_fname, emp_lname) );
czy nie wystarczy samo NOT NULL wszędzie. O ile z fname i laname to sprawa jest dosc jasna ze powinno pewnie tak byc to z emp_department juz nie. Jak widac jest tam referencja do innej relacji. Jak bedzie interfejs zrobiony to bedzie sie ten department wybierac z listy rozwujanej i nie da sie nic innego wybrac. Tak wiec czy potrzebne, albo czy wlasciwe jest dodawanie ogfraniczenie ze nie moze byc puste to pole? NOT NULL musi byc bo zawsze ma byc tam cos podane. i
Pozdrawiam plewas
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 20-02-2006 14:07
plewas wrote: > Witam, > Tak sie zastanawiam czy jest sens wpisywac wszelkie ograniczenia dla pol > np. > CREATE TABLE employee ( > emp_id serial CONSTRAINT pk_emp_id PRIMARY KEY, > emp_fname varchar(12) NOT NULL CONSTRAINT emp_fname_not_empty CHECK > (emp_fname <> ''), > emp_lname varchar(15) NOT NULL CONSTRAINT emp_lname_not_empty CHECK > (emp_lname <> ''), > emp_department char(3) NOT NULL CONSTRAINT emp_department_not_empty > CHECK (emp_department <> '') CONSTRAINT fk_emp_department REFERENCES > departments(dep_code), > CONSTRAINT employee_fname_lname_unique UNIQUE(emp_fname, emp_lname) > ); > > czy nie wystarczy samo NOT NULL wszędzie. > O ile z fname i laname to sprawa jest dosc jasna ze powinno pewnie tak > byc to z emp_department juz nie. Jak widac jest tam referencja do innej > relacji. Jak bedzie interfejs zrobiony to bedzie sie ten department > wybierac z listy rozwujanej i nie da sie nic innego wybrac. Tak wiec czy > potrzebne, albo czy wlasciwe jest dodawanie ogfraniczenie ze nie moze > byc puste to pole? NOT NULL musi byc bo zawsze ma byc tam cos podane. i
Tylko w niektórych bazach '' jest zamieniane na null przy wstawianiu. Moim zdaniem jest to złe zachowanie.
-- P.M.
Grzesiek G. - 20-02-2006 14:07
plewas napisał(a): > Witam, > Tak sie zastanawiam czy jest sens wpisywac wszelkie ograniczenia dla pol > np. > CREATE TABLE employee ( > emp_id serial CONSTRAINT pk_emp_id PRIMARY KEY, > emp_fname varchar(12) NOT NULL CONSTRAINT emp_fname_not_empty CHECK > (emp_fname <> ''), > emp_lname varchar(15) NOT NULL CONSTRAINT emp_lname_not_empty CHECK > (emp_lname <> ''), > emp_department char(3) NOT NULL CONSTRAINT emp_department_not_empty > CHECK (emp_department <> '') CONSTRAINT fk_emp_department REFERENCES > departments(dep_code), > CONSTRAINT employee_fname_lname_unique UNIQUE(emp_fname, emp_lname) > ); > > czy nie wystarczy samo NOT NULL wszędzie.
Z pewnego punktu widzenia NOT NULL można traktować jak inne ograniczenia, bo pewnie aplikacja i tak będzie nie dopuszczać do wstawiania pustych wartości.
> O ile z fname i laname to sprawa jest dosc jasna ze powinno pewnie tak > byc to z emp_department juz nie. Jak widac jest tam referencja do innej > relacji. Jak bedzie interfejs zrobiony to bedzie sie ten department > wybierac z listy rozwujanej i nie da sie nic innego wybrac. Tak wiec czy > potrzebne, albo czy wlasciwe jest dodawanie ogfraniczenie ze nie moze > byc puste to pole? NOT NULL musi byc bo zawsze ma byc tam cos podane. i
Używanie ograniczeń na poziomie bd może (ale nie musi :-() chronić dane przed błędami interfejsu, bądź błędnymi modyfikacjami wykonywanymi spoza tego interfejsu.
Z drugiej strony różne zmiany trzeba wprowadzać i w GUI i w bazie danych.
Dlatego chyba nie ma jednoznacznej odpowiedzi na Twoje pytanie.
-- Grzegorz Gruza Odpowiadając usuń "spamerom_nie." z adresu!!!
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
=?iso-8859-2?q?Kr=F3tkie_pytanie_-_PostgreSQL_8=2E2=2E2_i_CREATE_ASSERTION?=
db2 alter table alter column set default
[mssql] losowe (?) bledy przy create users
problem z "create view" i "distinct" w postgresql 8
CREATE USER/GRANT w procedurze Oracle'a?
Klucz złożony - prosba o wzor create
[oracle] create view, order by, with read only ?
[oracle] create user, domena windows
Oracle 10g Create procedure
MS Access CREATE GRUP
zanotowane.pldoc.pisz.plpdf.pisz.plets2.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|