私はデータベースを正規化しようとしていますが、頭痛に苦しんでいます。 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以上のページを保持している場合、繰り返しタグはストレージに追加され、疑いの余地はありません。
デザインに問題はありますか?何か間違っているの?私は大学でこれを学んだことを覚えていますが、それ以来、ほとんどデータベース設計を行っていません。
私はむしろ最初に正しいことを得て、後で頭痛があります。
私は 'page'のPKに' pid'を使い、 'tag'のPKには' tid'を使って、頭痛のないようにJOINを書くのに役立ちます。しかし、残りの部分はかなり上手く見えます。 –
また、すべてのテーブル名が単数形を使用するように、 'tags'ではなく' tag'という名前のテーブルにも名前を付けます。 –
ありがとうypercube –