2012-01-21 4 views
1

GAEの新機能ですので、詳細と例をお書きください。Googleアプリケーションエンジンでデータベースを設計する

私は2つのデータベースモデルUserとArticleを実行しようとしています。各ユーザーはいくつかの記事を持つことができます。私がしようとPythonで

create table User 
(
    id int primary key identity(1,1), 
    login nvarchar(50) unique not null, 
    password nvarchar(50) not null, 
    email nvarchar(50) unique not null, 
) 

create table Article 
(
    userId int references User(id) not null, 
    topic nvarchar(50) not null, 
    content nvarchar(max) not null 
) 

:SQL Serverでは、それは次のようになり

class Article(db.Model): 
    topic = db.StringProperty(multiline=False) 
    content = db.StringProperty(multiline=True) 

class User(db.Model): 
    login = db.StringProperty() 
    email = db.EmailProperty() 
    password = db.StringProperty(multiline=False) 
    articles = db.ListProperty(int) #here I want to do db.ListProperty(Article), but I can't. So I want to keep here id of article. 

そして、私の質問は以下のとおりです。

  • 私は、ログインして電子メールが
  • ユニークになることを提供することができますか
  • どのようにユーザーの主キーを取得できますか(SQLの場合

    select id from User where login = 'sada' and password = 'sd' 
    
  • どのように私は、ユーザIは、User-記事

にIDを維持したい場合、私は、ユーザーのために新しい記事を追加することができ、多分それが行うには、いくつかの良い方法であるか

  • を検索するには、この主キーを使用することができますこれは嬉しいことですが、私はより良い解決策を知ります

  • 答えて

    3

    まず、Google App Engine Datastoreはリレーショナルデータベースではありません。これはまったく異なるパラダイムです。たぶん、Datastore Overview documentationまたはMastering the datastoreを見てください。あなたの具体的な質問については

    1. ユニークなログインとメール:データストアがユニークcontraintsを提供していないので、あなたは、それがすでに存在しないことを確認する必要があります。また、この解決策を見ることができます:Add a Unique Constraint to Google App Engine。またはGoogle Accountsを使用できます。
    2. ユーザーとユーザーを検索するためのプライマリキーの主キー:GoogleのAppEngineのを使用して、あなたは直接ユーザーになるだろう:user = db.GqlQuery("SELECT * FROM Users WHERE login IS :1", login)
    3. を参考:ここではそれについて非常に良い記事です:Modeling entity relationships
    1
    1. Datastoreには一意制約というものはありません。ユニークであることが保証されている唯一のプロパティは、エンティティのキ​​ーです(key_name)。 1つの文字列でログインと電子メールを組み合わせて、key_nameとして使用できます。これはもちろん、ログインとパスワードを変更する可能性をいくらか制限します(新しいエンティティを作成し、参照を書き直す必要があります)。このコード

    2. いずれかを使用しますが、キーを持っていない場合は、このよう

      query = db.Query(User, keys_only=True) 
      query.filter('login =', 'sada') 
      query.filter('password =', 'sd') 
      user_key = query.get() 
      
    3. db.get(user_key) 
      

      、作成(keys_onlyは意味がキーだけではなく、全体のエンティティの返されます):

      user_key = Key.from_path(User, id_or_name) 
      
    4. それをやる。 data modelingについて読む

    0

    Googleのアプリケーションエンジンのデータベースの設計について書かれた書籍はあまりありません。私が見つけた最も有用な資料はBret Saltkin's talks in the Google I/Oでした。この講演では、アプリエンジンデータストアのいくつかの魔法の特性について説明します。私はdata modeling in google app engine hereについての詳細なブログを書いた。

    関連する問題