4

私は楽しみのために Facebook と Twitter を組み合わせたものを作っていますが、JDBC のセマンティクスについては 100% 確信が持てません。フィールドを外部キーに設定する方法や、varchar フィールドの文字数を制限する方法がわかりません。

私のコード(助けが必要な場所を示すコメント付き)は次のとおりです

(ns twitface.models.migration
  (:require [clojure.java.jdbc :as sql]))

(defn create-tables []
  (sql/with-connection (System/getenv "DATABASE_URL")
    (do 
      (sql/create-table :users
                        [:id :serial "PRIMARY KEY"]
                        [:email :varchar "NOT NULL"]
                        [:password :varchar "NOT_NULL"]
                        [:full-name :varchar "NOT NULL"]
                        [:pref-name :varchar]
                        [:created_at :timestamp "NOT NULL" "DEFAULT CURRENT_TIMESTAMP"])
      (sql/create-table :relations
                        [:id :serial "PRIMARY KEY"]
                        [:relating-user :numeric] ; foreign key
                        [:related-user :numeric]  ; foreign key
                        [:status :varchar])
      (sql/create-table :posts
                        [:id :serial "PRIMARY KEY"]
                        [:user :numeric "NOT NULL"]    ; foreign key
                        [:destination-user :numeric "NOT NULL"] ; foreign key
                        [:message :varchar "NOT NULL"] ; 180 char limit
                        [:created_at :timestamp "NOT NULL" "DEFAULT CURRENT_TIMESTAMP"])
      (sql/create-table :comments
                        [:id :serial "PRIMARY KEY"]
                        [:user :numeric "NOT NULL"]    ; foreign key
                        [:message :varchar "NOT NULL"] ; 180 char limit
                        [:created_at :timestamp "NOT NULL" "DEFAULT CURRENT_TIMESTAMP"]))))

どんな助けでも大歓迎です!前もって感謝します!

4

2 に答える 2

3

外部キーの場合references、SQL として使用:

(defn create-tables []
  (sql/with-connection (System/getenv "DATABASE_URL")
    (do
      (sql/create-table :users
                        [:id :serial "PRIMARY KEY"]
                        [:email "varchar(50)" "NOT NULL"]
                        [:password "varchar(30)" "NOT NULL"])
      (sql/create-table :relations
                        [:id :serial "PRIMARY KEY"]
                        [:related_user :serial "references users (id)"]
                        [:status "varchar(10)"]))))
于 2012-05-28T08:02:14.713 に答える
3

ドキュメントが見つからない場合は、プロジェクトに含まれているテストをチェックしてください。それでも問題が解決しない場合は、ソース コードをチェックしてください。これは、オープン ソースを使用する最大のメリットです。テストを調べてみたところ、使用するVARCHAR(180)代わりに使用:varcharして列の制限を指定できることがわかりました。同様に、通常のSQL構造を使用して外部キーを指定できます

于 2012-05-28T06:13:42.440 に答える