Linux数据库大比拚[4]

[入库:2005年9月19日] [更新:2007年3月25日]

本文简介:

    当我将遵循ANSI标准的CREATE TABLE语句装入Postgresql的psql监控视程序是,我遇到的困难是很少的。我得到一些警告:外部关键字限制被接受但还没有实现,而且我不得不裁减RATING的COMMENT字段到255个字符,因为这是PostgreSQL的CHARACTER VARYING类型的字段的最大字段宽度。系统为存储大量数据提供BLOB数据类型,但是它们不在标准版本内,因此我决定了不使用他们。另外的问题是相当愚蠢--因为我不能找到有关PostgreSQL如何强制NUMERIC到C数据类型,也因为我不想使用float以避免舍入,我决定使得货币字段为分值(cent)的整数数字。
  
    我最后得到了这个略有不同的脚本:
  
  DROP TABLE BOOK;
  CREATE TABLE BOOK (
  ARTICLE_NO INTEGER PRIMARY KEY,
  AUTHOR_FIRST_NAMES CHARACTER(30),
  AUTHOR_LAST_NAMES CHARACTER(30),
  TITLE CHARACTER(30),
  ISBN CHARACTER(13) UNIQUE,
  WHOLESALE_PRICE INTEGER,
  RETAIL_PRICE INTEGER,
  COPIES_AVAILABLE INTEGER
  );
  DROP TABLE CUSTOMER;
  CREATE TABLE CUSTOMER (
  CUSTOMER_NO INTEGER PRIMARY KEY,
  FIRST_NAMES CHARACTER(30),
  LAST_NAMES CHARACTER(30),
  STREET CHARACTER(30),
  HOUSE_NO SMALLINT,
  POSTCODE CHARACTER(7),
  TOWN CHARACTER(30),
  ISO_COUNTRY_CODE CHARACTER(2)
  );
  DROP TABLE BOOKORDER;
  CREATE TABLE BOOKORDER (
  ORDER_NO INTEGER PRIMARY KEY,
  CUSTOMER_NO INTEGER NOT NULL,
  ORDERED DATE,
  DELIVERY DATE,
  STATUS CHARACTER(8)
  CHECK (STATUS IN (′ACCEPTED′,
  ′DELAYED′,
  ′SHIPPED′,
  ′RETURNED′,
  ′PAID′)),
  CONSTRAINT CUSTOMER_FK FOREIGN KEY (CUSTOMER_NO)
  REFERENCES KUNDE (KUNDENNAME)
  );
  DROP TABLE ORDER_POSITION;
  CREATE TABLE ORDER_POSITION (
  POSITION_NO INTEGER PRIMARY KEY,
  ORDER_NO INTEGER NOT NULL,
  ARTICLE_NO INTEGER NOT NULL,
  NUMBER SMALLINT,
  CONSTRAINT ORDER_FK FOREIGN KEY (ORDER_NO)
  REFERENCES BOOKORDER (ORDER_NO),
  CONSTRAINT BOOK_FK FOREIGN KEY (ARTICLE_NO)
  REFERENCES BOOK (ARTICLE_NO)
  );
  DROP TABLE RATING;
  CREATE TABLE RATING (
  RATING_NO INTEGER PRIMARY KEY,
  ARTICLE_NO INTEGER NOT NULL,
  SCORE SMALLINT,
  COMMENT CHARACTER VARYING(255),
  CONSTRAINT BOOK_FK FOREIGN KEY (ARTICLE_NO)
  REFERENCES BOOK (ARTICLE_NO)
  );
   
    使设计适应MySQL
  
    MySQL象PostgreSQL一样忽略外部关键字的限制,但是它搞了个UNIQUE限制。最后的脚本与PostgreSQL脚本差不多:
  
  DROP TABLE BOOK;
  CREATE TABLE BOOK (
  ARTICLE_NO INTEGER PRIMARY KEY,
  AUTHOR_FIRST_NAMES CHARACTER(30),
  AUTHOR_LAST_NAMES CHARACTER(30),
  TITLE CHARACTER(30),
  ISBN CHARACTER(13),
  WHOLESALE_PRICE INTEGER,
  RETAIL_PRICE INTEGER,
  COPIES_AVAILABLE INTEGER
  );
  DROP TABLE CUSTOMER;
  CREATE TABLE CUSTOMER (
  CUSTOMER_NO INTEGER PRIMARY KEY,
  FIRST_NAMES CHARACTER(30),
  LAST_NAMES CHARACTER(30),
  STREET CHARACTER(30),
  HOUSE_NO SMALLINT,
  POSTCODE CHARACTER(7),
  TOWN CHARACTER(30),
  ISO_COUNTRY_CODE CHARACTER(2)
  );
  DROP TABLE BOOKORDER;
  CREATE TABLE BOOKORDER (
  ORDER_NO INTEGER PRIMARY KEY,
  CUSTOMER_NO INTEGER NOT NULL,
  ORDERED DATE,
  DELIVERY DATE,
  STATUS CHARACTER(8),
  CONSTRAINT CUSTOMER_FK FOREIGN KEY (CUSTOMER_NO)
  REFERENCES KUNDE (KUNDENNAME)
  );
  DROP TABLE ORDER_POSITION;
  CREATE TABLE ORDER_POSITION (
  POSITION_NO INTEGER PRIMARY KEY,
  ORDER_NO INTEGER NOT NULL,
  ARTICLE_NO INTEGER NOT NULL,
  NUMBER SMALLINT,
  CONSTRAINT ORDER_FK FOREIGN KEY (ORDER_NO)
  REFERENCES BOOKORDER (ORDER_NO),
  CONSTRAINT BOOK_FK FOREIGN KEY (ARTICLE_NO)
  REFERENCES BOOK (ARTICLE_NO)
  );
  DROP TABLE RATING;
  CREATE TABLE RATING (
  RATING_NO INTEGER PRIMARY KEY,
  ARTICLE_NO INTEGER NOT NULL,
  SCORE NUMERIC(1,0),
  COMMENT CHARACTER VARYING(255),
  CONSTRAINT BOOK_FK FOREIGN KEY (ARTICLE_NO)
  REFERENCES BOOK (ARTICLE_NO)
  );
  使设计适应 mSQL
  
    因为mSQL是一个精简的数据库管理器(的确,有些人可能怀疑MySQL和mSQL是否是数据库管理系统),它放弃了大多数Sql的功能而仅仅接受SQL的一个严格限制的子集。这样,mSQL的脚本看上有很大不同:
  
  DROP TABLE BOOK
  CREATE TABLE BOOK (
  ARTICLE_NO INTEGER NOT NULL,
  AUTHOR_FIRST_NAMES CHARACTER(30),
  AUTHOR_LAST_NAMES CHARACTER(30),
  TITLE CHARACTER(30),
  ISBN CHARACTER(13),

本文关键:Linux数据库大比拚
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top