| PostgreSQL 8.0.0 �����ĵ���PostgreSQL �й� ������ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 5. ���ݶ��� | Fast Forward | Next | 
����������Լ�����ǿ����ڱ���洢ʲô���͵����ݵ�һ�ַ����� �������������Ӧ�ã������ṩ��Լ��ʵ����̫�ֲڡ����磬 һ��������Ʒ�۸���ֶο���Ӧ��ֻ��������������û��������������ֻ���������� ����һ���������������Ҫ���������ֶλ����е�������Լ���ֶ����ݡ����磬��һ��������Ʒ��Ϣ�ı��У� ÿ����Ʒ��Ŷ�Ӧ��ֻ��һ�С�
������Щ���⣬SQL���������ֶκͱ��϶���Լ���� Լ������������Ҫ������ʩ�ӵ�һ�п��ơ����һ���û���ͼ��һ���ֶ���洢��Υ��Լ�������ݣ���ô�ͻ��׳�һ������ �������ͬʱҲ��������ֵ����ȱʡֵ�������
���Լ���������Լ�����͡���������������ij���ֶ������ֵ��������һ������ı��ʽ�����磬Ҫǿ��һ�������IJ�Ʒ�۸� ������ã�
CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CHECK (price > 0)
);
����������Լ���������������ͺ��棬�ͺ���ȱʡֵ����һ���� ȱʡֵ��Լ�������������˳�����С�һ�����Լ����һ���ؼ��� CHECK �������һ������Բ������ı��ʽ��ɡ� ���Լ�����ʽӦ�ð�����Լ�����ֶΣ��������Լ����ûʲô�����ˡ�
�㻹���Ը����Լ��һ�����������֡������Ϳ����������Ϣ�������� ��������Ҫ������ʱ������Բ�ѯ���Լ������ǣ�
CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CONSTRAINT positive_price CHECK (price > 0)
);��ˣ�Ҫ����һ������Լ����ʹ�ùؼ���CONSTRAINT�� ���������һ����ʶ����Ȼ���ٸ���Լ�����塣
һ�����Լ��Ҳ�����������ɸ��ֶΡ�������洢һ�������۸��һ���ۿۼۣ��������뱣֤�ۿۼ۱������۵͡�
CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CHECK (price > 0),
    discounted_price numeric CHECK (discounted_price > 0),
    CHECK (price > discounted_price)
);
ͷ����Լ������ȥӦ�ú����졣������ʹ����һ���µ���� ��û�и�����ij���ֶ��ϣ����ڶ��ŷָ����ֶ��б�������һ�������е���ʽ���ֵġ� �ֶζ������ЩԼ����������Ի�ϵ�˳���г���
����˵ͷ����Լ�����ֶ�Լ�������������DZ�Լ������Ϊ�����ֶζ���ֿ�д�� �ֶ�Լ��Ҳ����д�ɱ�Լ�������������ܿ��ܲ��С����������Ҳ������ôд
CREATE TABLE products (
    product_no integer,
    name text,
    price numeric,
    CHECK (price > 0),
    discounted_price numeric,
    CHECK (discounted_price > 0),
    CHECK (price > discounted_price)
);������
CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CHECK (price > 0),
    discounted_price numeric,
    CHECK (discounted_price > 0 AND price > discounted_price)
);��ֻ�Ƿ��IJ�ͬ��
���ǻ�Ҫ֪��һ�����Լ���ڱ��ʽ���������߿�ֵ��ʱ���ǵõ�����ġ� ��Ϊ��������ʽ������һ���������ǿյ�ʱ��ó���ֵ�� ������ЩԼ����������Լ���ֶ��Ͻ�ֹ��ֵ��Ҫȷ��һ���ֶβ�������ֵ�����ǿ���ʹ����һ�ڽ��ܵķǿ�Լ����
�ǿ�Լ��ֻ�Ǽ�����һ���ֶα��벻���ǿ�ֵ��������һ������ӣ�
CREATE TABLE products (
    product_no integer NOT NULL,
    name text NOT NULL,
    price numeric
);
һ���ǿ�Լ������д��һ���ֶ�Լ���� �ǿ�Լ���ڹ����ϵ�Ч�ڴ���һ�����Լ�� CHECK (column_name IS NOT NULL)�� ���� PostgreSQL �����һ����ȷ�� �ǿ�Լ��Ч�ʸ��ߡ�ȱ�����㲻�ܸ���ô�����ķǿ�Լ��һ����ȷ�����֡�
��Ȼ��һ���ֶο����ж��Լ����ֻҪ��һ��Լ���������д����һ���Ϳ����ˣ�
CREATE TABLE products (
    product_no integer NOT NULL,
    name text NOT NULL,
    price numeric NOT NULL CHECK (price > 0)
);����˳������ν��˳��Ӱ��Լ������˳��
NOT NULL Լ���и��෴��Լ����NULL Լ�������Լ��������ζ�Ÿ��ֶα����ǿգ���Ϊ�������ֶ�Ҳûɶ�á� ��ֻ�Ƕ����˸��ֶο���Ϊ�յ��������Ϊ���� SQL ����û�ж��� NULL Լ���� ��˲�Ӧ���ڿ���ֲ��Ӧ����ʹ������ �������� PostgreSQL �����������Լ��ֻ��Ϊ�˺��������ݿ�ϵͳ���ݡ��� ��������Щ�û�ϲ��������Ϊ���Լ�����������Ǻ������ڽű��ļ����л�Լ�������磬����Դ�����������ʼ
CREATE TABLE products (
    product_no integer NULL,
    name text NULL,
    price numeric NULL
);Ȼ������Ҫ��ʱ����� NOT �ؼ��֡�
��ʾ: �ڴ�������ݿ�������Ҫ���ֶζ�Ӧ�ñ��Ϊ�ǿա�
ΨһԼ����֤��һ���ֶλ���һ���ֶ������������������е����������Ψһ�ġ��������
CREATE TABLE products (
    product_no integer UNIQUE,
    name text,
    price numeric
);������д���ֶ�Լ�����������
CREATE TABLE products (
    product_no integer,
    name text,
    price numeric,
    UNIQUE (product_no)
);��д�ɱ�Լ����
���һ��ΨһԼ������һ���ֶΣ���ô��Щ�ֶ��ö��ŷָ��г���
CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    UNIQUE (a, c)
);
����Ҳ���Ը�ΨһԼ���������֣�
CREATE TABLE products (
    product_no integer CONSTRAINT must_be_different UNIQUE,
    name text,
    price numeric
);
ͨ��������ڱ��������л�����У�����Щ���а�����ΨһԼ��������Ǽ����ֶζ���ȣ���ô����Υ����ΨһԼ���� ���������ֱȽ��У���ֵ����Ϊ����ȵġ������ζ�ţ��ڶ��ֶ�ΨһԼ��������£� ���������һ���ֶ��ϴ��ڿ�ֵ����ô�����������ǿ��Դ洢������� ������Ϊ��ѭ SQL ��������������˵���� SQL ���ݿ���ܲ���ѭ���������������Ҫ��������ֲ�ij��� ��ô�����ϸЩ��
�Ӽ���������������Լ��ֻ��ΨһԼ���ͷǿ�Լ������ϡ� ���ԣ����������������ͬ�������ݣ�
CREATE TABLE products (
    product_no integer UNIQUE NOT NULL,
    name text,
    price numeric
);
CREATE TABLE products (
    product_no integer PRIMARY KEY,
    name text,
    price numeric
);
����Ҳ����Լ������һ���ֶΣ��������ΨһԼ����
CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    PRIMARY KEY (a, c)
);
������ʾһ���ֶλ��������ɸ��ֶε���Ͽ������ڱ��е������е�Ψһ��ʶ�� �����Ƕ���һ��������ֱ�ӽ������ע��һ��ΨһԼ��ʵ���ϲ������ṩһ��Ψһ��ʾ����Ϊ�����ų���ֵ���� ������ܶ��ĵ�Ŀ�ĺͿͻ�Ӧ�ö������á����磬һ������������ֵ�� GUI Ӧ�ÿ�����Ҫ֪��һ�������������Ψһ�ر�ʶһ���С�
һ������������һ�������������������ж��Ψһ�ͷǿ�Լ������ ��ϵ�����ݿ����۸������ǣ�ÿ����������һ��������PostgreSQL ����ǿ���������������û�����ѭ����
���Լ������һ���ֶΣ�����һ���ֶΣ�����ֵ����ƥ������һ������ijЩ�г��ֵ���ֵ�� ���ǰ������Ϊ����������ر�֮����ο���������
�������и���Ʒ�����ǿ���ʹ���˺ü��Σ�
CREATE TABLE products (
    product_no integer PRIMARY KEY,
    name text,
    price numeric
);�����Ǽ�������һ���洢��Щ��Ʒ�Ķ����ı� �����뱣֤������ֻ����ʵ�ʴ��ڵIJ�Ʒ����������ڶ������ж���һ�����Լ�����ò�Ʒ��
CREATE TABLE orders (
    order_id integer PRIMARY KEY,
    product_no integer REFERENCES products (product_no),
    quantity integer
);���ڣ����Dz����ܴ����κ��� product_no û���ڲ�Ʒ���г��ֵĶ�����
��������������ǰѶ�������������� ����Ʒ���������������Ƶ�Ҳ�������ֶκͱ������ֶΡ�
��Ҳ��������������д��
CREATE TABLE orders (
    order_id integer PRIMARY KEY,
    product_no integer REFERENCES products,
    quantity integer
);��Ϊ���ȱ���ֶ��б�Ļ��������ñ�������ͻᱻ�����������ֶ�ʹ�á�
һ�����Ҳ����Լ��������һ���ֶΡ�ͬ����Ҳ��Ҫд�ɱ�Լ������ʽ�� ������һ���������������ӣ�
CREATE TABLE t1 ( a integer PRIMARY KEY, b integer, c integer, FOREIGN KEY (b, c) REFERENCES other_table (c1, c2) );
��Ȼ����Լ�����ֶε���Ŀ��������Ҫ�ͱ������ֶε���Ŀ������һ�¡�
һ�������������һ�����Լ���������������ʵ�ֱ�֮���Զ�� ��ϵ���������й��ڲ�Ʒ�Ͷ����ı���������������һ������������ ���ֲ�Ʒ�������Ǹ��ṹ�Dz�������ô���ģ��������ʹ�������Ľṹ��
CREATE TABLE products (
    product_no integer PRIMARY KEY,
    name text,
    price numeric
);
CREATE TABLE orders (
    order_id integer PRIMARY KEY,
    shipping_address text,
    ...
);
CREATE TABLE order_items (
    product_no integer REFERENCES products,
    order_id integer REFERENCES orders,
    quantity integer,
    PRIMARY KEY (product_no, order_id)
);��Ҫע�����ı��������������ص��ġ�
����֪����������������κβ�Ʒ���صĶ����� �������һ����������֮�������õIJ�Ʒ��ɾ���˻���ô�죿 SQL Ҳ�����㴦��������⡣��˵�������м���ѡ��
������ɾ��һ�������õIJ�Ʒ
ͬʱҲɾ������
�����ģ�
Ϊ��˵��������⣬�����Ƕ�����Ķ�Զ�Ĺ�ϵ�����ƶ������ ���ԣ����������ɾ��һ����Ȼ��һ���������õIJ�Ʒ��ͨ�� order_items������ô���Dz���������ô���� �������ɾ����һ����������ô������Ҳ��ɾ����
CREATE TABLE products (
    product_no integer PRIMARY KEY,
    name text,
    price numeric
);
CREATE TABLE orders (
    order_id integer PRIMARY KEY,
    shipping_address text,
    ...
);
CREATE TABLE order_items (
    product_no integer REFERENCES products ON DELETE RESTRICT,
    order_id integer REFERENCES orders ON DELETE CASCADE,
    quantity integer,
    PRIMARY KEY (product_no, order_id)
);
���ƺͼ���ɾ�������������ѡ�RESTRICT ��ֹɾ�������õ��С� NO ACTION ����˼������ڼ��Լ����ʱ������������κ������У����׳����� ����㲻�����κζ�������ô������ȱʡ����Ϊ�� ��������ѡ���ʵ�������ǣ�NO ACTION ����Լ������Ƴٵ��������Щʱ�� RESTRICT ���С��� CASCADE ������ɾ��һ�������õ��е�ʱ������������Ҳ�ᱻ�Զ�ɾ������ ������ֶ��ϵĶ�����������ѡ� SET NULL �� SET DEFAULT�� �����ᵼ���ڱ�������ɾ����ʱ���������ǵ��ֶηֱ�����Ϊ�ջ���ȱʡֵ�� ��ע����Щѡ������������ѱ��۲��Լ���ľ��ء� ���磬���һ���������� SET DEFAULT������ȱʡֵ�����������������ô�����ͻ�ʧ�ܡ�
���� ON DELETE������ ON UPDATE ѡ������ڱ������ֶ��ģ����£���ʱ����õġ����õĶ�����һ���ġ�
�йظ��º�ɾ�����ݵĸ�����Ϣ������ Chapter 6 ���ҵ���
�������Ӧ��˵�����ǣ�һ���������Ҫô����һ��������Ҫô����һ��ΨһԼ���� ������������һ��ΨһԼ������ô�����ƥ���ֵ��������ϻ���һЩ�����Ŀ����ԡ� ��Щ�������� CREATE TABLE ��� CREATE TABLE �н��͡�