私はこれがこれらの疑問の1つであると考えていますが、それは単一の決定的な回答ではありません。しかし、私は、一般的にベストプラクティスと考えられるものを、ほとんどの場合はとにかく考えていることについて、いくつかの洞察を得ることを望んでいます。だから、これに重点を置く人々に事前に感謝します。このデータを表現するためのより良いスキーマは何でしょうか?
レコードを格納するための2つのタイプのフォルダがあります。個人用フォルダとチームフォルダ。
私はデータベースでこれを表すことができます二つの方法...
オプション1があります:2つの独立した無関係のフォルダテーブルが。
personalFolders(id, userId, title)
teamFolders(id, teamId, title)
records(id, folderId, folderType, title)
オプション2:2と共通のフォルダテーブルにはテーブルを結合
folders(id, title)
personalFolders(folderId->folders.id, userId)
teamFolders(folderId->folders.id, teamId)
records(id, folderId->folders.id, title)
私の質問をされています。一般的に、どのようなスキーマがベストプラクティスと考えられるでしょうか?
(その後、私はレコードをテーブルに外部キー制約を保つことができるので、私の腸は、オプション2に行くために私に言っている。しかし、オプション1で行く方が良いかもしれない状況があるのですか?)
個人用フォルダとチームフォルダのタイトルは同じですか?もっと一般的な質問は、フォルダやフォルダの種類ごとに自然なキーは何ですか? –
@rd_nielson - はい、同じタイトルを持つことができます。 IDが主キーです。 – trav
オプション2では、タイトルにユニークなインデックスを作成し、同じタイトルを持つ個人用フォルダとチームフォルダの両方に同じIDを使用させるか、同じタイトルの2つの異なるIDを使用できますか?後者の場合、個人用フォルダとチームフォルダが両方とも同じIDを参照しないようにトリガを作成する予定ですか?関連して、タイトル以外の個人またはチームのフォルダには他の属性がありますか? –