

二人のシフトを管理できるiOSアプリを作成しようと考えています。  
システム構成的には、クライアントサイドはswift3で実装して、サーバサイドはgoからDBを操作しようと考えていました。

そこで、DB設計をしていたのですが、二人のリレーションをどうやって定義すれば良いかという問題に当たりました。  
僕が考えた候補は二つあり

[code]

    CREATE TABLE `users` (
      `id` INTEGER AUTO_INCREMENT,
      `name` VARCHAR(255),
      `uuid` VARCHAR(255),
      PRIMARY KEY (`id`)
    );
    
    CREATE TABLE `pairs` (
      `id` INTEGER AUTO_INCREMENT,
      `user1_id` INTEGER,
      `user2_id` INTEGER,
      PRIMARY KEY (`id`),
      FOREIGN KEY (`user1_id`) REFERENCES `users`(`id`),
      FOREIGN KEY (`user2_id`) REFERENCES `users`(`id`)
    );
    
[/code]

のようにユーザ間のリレーションを定義するテーブルを作成するか、

[code]

    CREATE TABLE `users` (
      `id` INTEGER AUTO_INCREMENT,
      `name` VARCHAR(255),
      `uuid` VARCHAR(255),
      `partner_id` INTEGER,
      PRIMARY KEY (`id`),
      FOREIGN KEY (`partner_id`) REFERENCES `users`(`id`)
    );
    
[/code]

のように一つのテーブルで自身のテーブルを参照する、という感じです。  
どちらの方が扱い安く、スマートでしょうか？  
また、もっといい設計があれば教えていただきたいです。  
また、iOSでデータベースを扱うのにはRealmが一般的だと思いますが、  
複数のiOSの端末間で扱う場合はサーバを立ててDBを扱うやり方で大丈夫でしょうか？  
ご回答お待ちしております。


CC BY-SA 3.0
2017-09-02T13:39:33.903
37679
2017-09-02T13:39:33.903
25172
question
swift mysql sql database
ユーザ同士を関連づけるDB設計