以上の方がよいでしょうか?mysqlで文字列形式で保存しても構いませんか?
私はブックマークを保存したいと思います。私はそれを定義するタグの階層を保持する文字列形式の配列であるタグ列が必要です。たとえば、次のように
url | tag
'stackoverflow.com', '[faves, internet, QandA]'
私の現在の表は以下の通りです、と私は単なる文字列形式の配列を保持するためにtag
列を変更したいです。
以上の方がよいでしょうか?mysqlで文字列形式で保存しても構いませんか?
私はブックマークを保存したいと思います。私はそれを定義するタグの階層を保持する文字列形式の配列であるタグ列が必要です。たとえば、次のように
url | tag
'stackoverflow.com', '[faves, internet, QandA]'
私の現在の表は以下の通りです、と私は単なる文字列形式の配列を保持するためにtag
列を変更したいです。
いいえ、それは文字列にカンマ区切りのリストを保存するために通常は良い考えではありません。
例外:クエリで常に文字列全体が文字列として扱われ、個々の要素を検索するためにSQL式を使用する必要がない場合は、これを実行しても問題ありません。
SQLでは、各列を配列ではなく単一のスカラー値として扱う方がよいでしょう。データを扱う作業は、列をサブパーツに分解できるものとして扱うと、扱いにくく非効率的になります。
タグの場合、各ブックマークをタグテーブルの1行に1つずつ、多くのタグで参照できるように、1対多タグテーブルが必要です。
本当は、タグのルックアップテーブル、次に多対多テーブルのブックマークをタグにマッピングします。
CREATE TABLE Tag (
tag_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
tag VARCHAR(50) NOT NULL
);
CREATE TABLE BookmarkTag (
bookmark_id INT NOT NULL,
tag_id INT NOT NULL,
PRIMARY KEY (bookmark_id, tag_id),
FOREIGN KEY (bookmark_id) REFERENCES Bookmark(bookmark_id),
FOREIGN KEY (tag_id) REFERENCES Tag(tag_id)
);
これは、たとえば、あなたがより多くの柔軟性を提供します:
も参照してください。私の答えはIs storing a delimited list in a database column really that bad?
いいえ、それはまったく良い方法ではありません。文字列にタグを格納することで、条件付きでタグを使用するなどの特定の機能が失われます。タグの新しいテーブルを作成することを検討してください。 –