2012-01-05 4 views
0

用のデータベースを整理:私はこのような構造化されたデータが含まれているWebアプリケーションを持っている複数のソースのデータ入力

  • レビュー(などのタイトル、タイプ、テキスト、年、等の特性を持っている)
  • ソフトウェア(レビューと多対多の関係で)
  • (レビューと多対多の関係で)言語(レビューと1対多の関係で)
  • 所有者

すべてのレビュー、ソフトウェア、言語、所有者などを管理するWebフォームがあり、データがサイトに正しく表示されます。

これらのレビュー(基本的には自分のレビューのみ)のデータを第三者が変更できるようにする必要があります。その後、変更をレビュープロセスにかけ、既存のデータとマージする必要があります。

このようなニーズが発生したときのベストプラクティス(データベース設計に関する)は何ですか?

答えて

0

基本的には、バージョン管理の仕組みが必要です。これにより、時間の経過とともに各REVIEWの複数のインスタンスが許可されます。

保留中および履歴バージョン用の別のレビューテーブルを保持することによってこれを行う人もいます(たとえば、REVIEW_HISTORYなど)(WordPressを含む)、メインの記事テーブルにバージョン番号とステータスを入れて、ユーザーの種類(エディタ等、公共、管理者、)

編集: OPの質問は、データベース設計のためのベストプラクティスについて尋ねたので、私はこれが上の意図的な選択だったアクセス制御の問題に対応していませんでした私が必要とされるのは、データ駆動のアクセス制御メカニズムであり、ユーザはそれらを編集することができます彼らが所有するecords。所有権はデータモデルで確立され、アプリケーションロジックによって課されなければなりません。ロールベースのセキュリティは、ロールベースのセキュリティの問題ではありませんが、ロールベースのセキュリティは、おそらくこれまたはすべてのシステムにとっても良い考えです。私の見解のOPの質問で

バージョニング、ない程度アクセス制御です。

+0

私はついにこの問題に取り組んでいます。アプリケーションロジックのアクセス制御を強制することは正しく、データベース設計とはほとんど関係ありません。最も実用的なソリューションのように、複数のテーブルを使用したバージョン管理されたデータベースも以前と同じように見えました。 –

0

権限システムを実装する必要があります。これを行う古典的な方法は、「ユーザー」、「役割」、および許可の概念を導入することです。

たとえば、任意のプロジェクトタイプのレビューを作成し、レビューを変更して公開する権利を持つユーザーロール "My content editors"を作成することができます。ユーザーAliceとBobがその役割を果たしている可能性があります。

「CompanyX content creator」というロールを作成して、製品a、b、およびcのレビューのみを作成する権利を持っています。ユーザーXavierがその役割を果たしている可能性があります。

次に、各ステップで必要な権限を理解するために、コンテンツの作成および公開プロセスを変更する必要があります。おそらく、レビューのために "ステータス"(そして場合によっては@JoelBrownが書いているバージョン)の概念を導入する必要もあるでしょう。初期ステータスは "ドラフト"で、ロール "My content editors"のユーザだけがステータスに移行できます"公開されました"。

これは、この種の要件に対するかなり標準的な構成です。最初に適切なアプリケーションがあれば簡単です。

関連する問題