2011-06-24 8 views
0

私はデータベースを正規化しようとしていますが、頭痛に苦しんでいます。 Facebookのユーザーが自分のサイトにページを作成できるCMSを開発しています。これまでのところ、これは私が持っているものですMySQLの設計上の問題

page 
---- 
uid   - PK AI 
slug   - Slug URL 
title   - Page title 
description - Page description 
image   - Page image 
imageThumbnail - Thumbnail of image 
owner   - The ID of the user that created the page 
views   - Page views 
timestamp  - Date page was created 

user 
---- 
uid - PK AI 
fbid - Facebook ID 
(at a later date may add profile options i.e name, website etc) 

tags 
---- 
uid - PK AI 
tag - String (tag name) 

page_tag 
-------- 
pid - Page id (uid from page table) 
tid - Tag id (uid from tag table) 

page_user 
--------- 
pid - Page id (uid form page table) 
uid - User ID (uid from user table) 

私は、上に行くことなく、必要なだけ多くの情報を分離しようとしました。私はタグ名が繰り返されることを望まないので、タグのための別個のテーブルを作成しました。データベースが100,000以上のページを保持している場合、繰り返しタグはストレージに追加され、疑いの余地はありません。

デザインに問題はありますか?何か間違っているの?私は大学でこれを学んだことを覚えていますが、それ以来、ほとんどデータベース設計を行っていません。

私はむしろ最初に正しいことを得て、後で頭痛があります。

+0

私は 'page'のPKに' pid'を使い、 'tag'のPKには' tid'を使って、頭痛のないようにJOINを書くのに役立ちます。しかし、残りの部分はかなり上手く見えます。 –

+0

また、すべてのテーブル名が単数形を使用するように、 'tags'ではなく' tag'という名前のテーブルにも名前を付けます。 –

+0

ありがとうypercube –

答えて

1

私にはうまく見えます。 5つのテーブルでどれくらい悪いことができますか?

ユーザー、ページ、タグがあります。ユーザーは多数のページを持つことができます。多くのユーザーがページを参照できます。ページには多数のタグがあります。タグを多くのページに関連付けることができます。

私のためにまとめてください。私はそれについて心配しません。

あなたの次の懸念事項はインデックスです。クエリに使用するWHERE句ごとにインデックスが必要です。

+0

完全にインデックスを忘れてしまった、多くのありがとう。 –

関連する問題