0

私は Yii Web アプリケーション用のデータベースを設計していますが、正しい方法で行っているかどうか確信が持てません。

CREATE TABLE user
(
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(128) NOT NULL,
    password VARCHAR(128) NOT NULL,
    email VARCHAR(128) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE post
(
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(128) NOT NULL,
    description TEXT NOT NULL,
    media TEXT NOT NULL,
    tag_id INTEGER NOT NULL,
    status INTEGER NOT NULL,
    create_time INTEGER,
    update_time INTEGER,
    user_id INTEGER NOT NULL,
    CONSTRAINT FK_post_user FOREIGN KEY (user_id)
        REFERENCES user (id) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE comment
(
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    content TEXT NOT NULL,
    status INTEGER NOT NULL,
    create_time INTEGER,
    user_id INTEGER NOT NULL,
    post_id INTEGER NOT NULL,
    CONSTRAINT FK_comment_post FOREIGN KEY (post_id)
        REFERENCES post (id) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE tag
(
    id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(128) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

問題:

1.) post テーブルに tag_id があります。既存のタグと新しく追加されたすべてのタグをタグテーブルに保存してから、誰かが既存のタグを使用するか、新しいタグを作成して、tag_id として追加し、「、」でテーブルを投稿することを考えていました。これが最善の解決策ですか?

2.) コメント テーブルには、user_id と post_id があります。コメントテーブルに2つの外部キーを設定する必要がある場合、外部キーがどのように機能していると思いますか? 私はそれを試しましたが、エラーが発生しました。

3.) ポスト テーブルにはメディア行があります。この行の場所に保存して、YouTube やその他のソースからアップロードされた画像または埋め込みコードを保存します。そのために同じ行のみを使用しても問題ありませんか、それとも別々に使用する必要がありますか? 画像用に 1 つ、埋め込みコード用に 1 つ?

前もって感謝します

4

1 に答える 1

0

1)tags代わりtag_idに名前の付いた列を使用する場合は、テーブルからのtag_idのシリアル化された配列を保持しますtags

2)同じ名前の外部キーを追加しようとしたために私が思う問題。使用してみてください

CONSTRAINT FK_comment_post FOREIGN KEY
CONSTRAINT FK_comment_post_2 FOREIGN KEY

3)post(pdf_file、またはmusic)に別のメディア情報を追加することにした場合はどうなりますか。テーブルポストに新しい列を追加してください。正しくありません。postmeta任意のタイプのコンテンツを作成できる追加のテーブルを作成し、代わりにをmedia使用することをお勧めしますpost_text。ワードプレスのように。

于 2013-03-06T06:56:31.877 に答える