首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

Linux 資料庫大比拚 (二):書店資料庫設計、三系統 Schema 適配與 C 客戶端實作

     編輯:關於SqlServer

測試資料庫:網路書店

五張表:BOOK(書目)、CUSTOMER(客戶)、BOOKORDER(訂單)、ORDER_POSITION(訂單明細)、RATING(評分)。

標準 ANSI SQL 建表腳本

CREATE TABLE BOOK (
    ARTICLE_NO INTEGER PRIMARY KEY,
    AUTHOR_FIRST_NAMES CHAR(30),
    AUTHOR_LAST_NAMES CHAR(30),
    TITLE CHAR(30),
    ISBN CHAR(13) UNIQUE,
    WHOLESALE_PRICE NUMERIC(4,2),
    RETAIL_PRICE NUMERIC(4,2),
    COPIES_AVAILABLE INTEGER
);
-- CUSTOMER, BOOKORDER, ORDER_POSITION, RATING 類似,含 FK、CHECK 約束

三系統適配差異

PostgreSQL

  • FK 約束「接受但未實作」(僅語法檢查)
  • CHARACTER VARYING 最大 255 字元 → COMMENT 縮減至 255
  • 無標準 MONEY 型別 → 價格改用「分」整數儲存
  • 不支援 ORDER BY 游標、FOR READ ONLY 子句

MySQL

  • 同樣忽略 FK 約束
  • 支援 UNIQUE 約束
  • 腳本與 PostgreSQL 版本近似

mSQL(最精簡)

  • 無 PRIMARY KEY、FK、CHECK、UNIQUE 等約束
  • NUMERIC → MONEY(固定兩位小數)
  • CHARACTER VARYING → TEXT(255)
  • 不支援分號結束、標準輸入批次執行 → 需逐行 \g 送出

C 語言客戶端實作核心操作

  • 新增/刪除書籍、客戶
  • 下單(訂單+明細)
  • 評分書籍
  • 修改訂單狀態
  • 報表:書目/客戶清單、出貨狀態排序、獲利分析、評分統計

三系統 API 呼叫風格對比

PostgreSQL — ESQL (ecpg 預處理器)

  • 嵌入式 SQL,EXEC SQL 區塊宣告宿主變數
  • 游標操作:DECLARE ... CURSOR → OPEN → FETCH → CLOSE
  • 文件缺乏、ecpg 錯誤訊息不詳、預處理器脆弱

MySQL — C API

  • 結構體 MYSQL 維護連線狀態
  • 查詢以字串送出 → mysql_query()
  • 結果集 MYSQL_RES*,逐列 mysql_fetch_row() 取得字串陣列
  • 文件採 Texinfo 格式,相對完整

mSQL — C API

  • 與 MySQL 极似,差異:連線僅一個 int、函數名 PascalCase、部份函數不需連線參數
  • MONEY 型別需手動轉換分/元格式化

初步結論

  • 三者 API 客戶端程式庫極小,對二進位大小/記憶體足跡影響可忽略
  • PostgreSQL ESQL 程式碼較冗長但型別轉換自動;MySQL/mSQL 需手動處理字串轉型
  • 效能比較留待下集基準測試
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved