0

私は、5 つの主要なカテゴリがすべて 1 つのテーブルに詰め込まれている SQL Server データベースから実行される Web サイトを刷新する任務を負っています。

現在のデータベースには、Media と Galleries の 2 つのテーブルがあります。

Media テーブルには、5 つのメイン カテゴリそれぞれのすべての情報が含まれています。(ビデオ、ゲーム、漫画、写真、ジョーク)

Galleries テーブルには、ギャラリー (アルバム) に関する情報が含まれています。

その MediaType に関連付けられた情報がないため、一部の列は null です。例: ジョークには、MediaHeight または MediaWidth が関連付けられることはありません。

テーブルの外観は次のとおりです。

メディア

メディア

ギャラリー

ここに画像の説明を入力

各 MediaType を独自のテーブルに分割することをお勧めしますか?

何かのようなもの:

ビデオ
ID
MediaID
MediaTypeID
VideoTitle
VideoDesc
など...

ゲーム
ID
MediaID
MediaTypeID
GameTitle
GameDesc
GameWidth
GameHeight
など...

ジョーク
ID
MediaTypeID
JokeTitle
JokeDesc

すべてのデータがそれぞれのテーブルに分割されたら、クエリを実行して結合を実行するメイン テーブルが必要ですか? テーブルがどうなるかはわかりませんが…

現在、ホームページ クエリは、特定の時間における各 MediaType のレコードで構成されます。ユーザーが何をアップロードするかによって、コンテンツは頻繁に変更されます。この 5 つのテーブル レイアウトを使用して、各メディア テーブルからのデータを含むクエリはどのように見えるでしょうか? (ビデオ、ゲーム、ジョークなど)

現在のデザインに新しいメディアを追加する場合は、Media テーブルに新しい行を追加するだけで、ホームページ クエリが自動的にそれを取得します。挿入クエリが 5 つのテーブルでどのように機能するかわかりません。メイン テーブルを更新してから、個々の MediaType (例: Jokes) テーブルも更新する必要がありますか?

また

この肥大化したテーブルのデザインに固執する必要がありますか?

ベストプラクティスを念頭に置いて、少し方向性を探しています。

ありがとう!

4

2 に答える 2

1

できれば現在のデザインに固執しないでください。あなたが言ったように、それは肥大化して醜く、クエリであり、列がnullであるかどうかを判断するためにあらゆる種類のチェックが必要です。検証が非常に難しくなります。誰かが新しいビデオを作成している場合、現在のメディア テーブルをチェックして必要なフィールドを確認することはできませんが、別のビデオ テーブルを使用すると確認できます。

「メイン」テーブル ATM の必要性がわかりません。メディア固有の列を持つ複数の異なるテーブルを用意しても問題ありません。通常、結合テーブルとして機能するこの種のデータに関連付けられる顧客またはユーザー フィールドがありますが、それはユース ケースに適合しません。それは問題ありません。

ホームページはユニオンを使ってみてください。過去 1 時間の各テーブルから select * を実行し、結果を結合して 1 つの結果セットを取得します。挿入の場合は、適切なテーブルに挿入するだけです。その肥大化したテーブルはごちゃごちゃしており、あまり明確ではなく、維持するのが困難です。

5 つのテーブルを使用すると、コーディングがはるかに簡単になります。

于 2013-09-25T01:42:59.613 に答える
0

データベースは構造的には比較的大丈夫だと思います。カテゴリごとにテーブルを作成すると、冗長性が導入されます。これは、データベース設計には禁物です。できることは、ギャラリーのフラグを追加し、そのフラグを使用してギャラリーをタイプ別に並べ替えることですが、ギャラリーが数個しかなく、各ギャラリーのタイプが 1 つしかない場合、その意味がわかりません。

現在の構造には、Media テーブルに「MediaTypeID」フィールドがあることがわかります。冗長性のために、そのフィールドを Gallery テーブルに移動できます。

更新: 人々はテーブルに分割するアプローチを採用する傾向があるので、私の意見を説明する必要があると感じています. あなたが現在持っているメディアの種類は、ほとんどの分野を共有しているように思えます。いくつかの null がある場合でも、テーブルを分割した場合でも分割しなかった場合でも、結果のテーブルにはおそらく同じ null が含まれます。

于 2013-09-25T01:43:15.497 に答える