0

私は、ページ/投稿、カスタムページ/投稿、カスタムフィールドを持つCMSを開発しています。これらのカスタムフィールドは、UIを通じて選択され、カスタムページに添付されます。説明、注文、価格および日付:MySQLのlongtext型フィールドに任意の種類の型(整数、テキスト、日付)を格納していますか?

は例えば、私たちは、これらのフィールドを持つことになりますカスタムページ/ポスト「プロジェクト」を作成します。私は私が持っているすべてのページタイプのテーブルを使用したくない

、私はすべての与えられたカスタムフィールドのすべてのフィールドを格納するための1つのテーブルを使用する場合、問題は、彼らが異なるデータ型を持っている可能性があります。 私の質問は、(パフォーマンスを考えて)悪い考えですか?汎用longtext型フィールドの順序値?データ型に応じてcustomfieldの値を格納し、残りをnullのままにする3つのフィールド(日付、整数、テキスト)で「カスタム評価可能」を作成する方が良いでしょうか?

おかげ

+0

コンドル。両方のデザインの痛みを再発見することになります。 [_Aother(partial)solution_](https://mariadb.com/kb/en/mariadb/entity-attribute-value-implementation/) –

答えて

0

は技術的に言えば、それは悪い考えです...両方のアイデアを、実際に。 「いつもテーブルを変更したくない」と思うかもしれませんが、文字列の検索は数値、日付などを検索するよりも効率が悪いです。すべてをテキストフィールドに入れたいだけでなくそれはより多くのスペースを取るでしょう、検索はすべて文字列検索です。

あなた自身に尋ねるべきことは、これは何ですか、あなたは実際に達成したいのですか?いくつかの追加のの任意のデータを静的データと一緒に保存する場合は、そのようなデータをjson-encodeして「customdata」などと呼ばれる1つのフィールドに入れます。または、nosql/keyvalue-storeを使用して始めてください!

あなたがそれを探したいときは、余分なところで、drupalがカスタムフィールドをどのように扱うかを見てください。醜いですが、少なくとも一貫しています。数値は数値フィールドに格納する必要があります。 (なぜなら、文字の辞書順の並び替えは文字列フィールドで本当に奇妙なので...)。

+0

ありがとう@ジャクミ。だから、4つのフィールド(データ、テキスト、浮動小数点、intなど)を持つ方が良いアイデアだと思いますか? – gabyneko

+0

いいえ、私はあなたのテーブルを膨らませるが、恐怖のいずれかを和らげないと思います。私は本当に各ページの種類のテーブルを使用することをお勧めします。 – Jakumi

+0

ありがとうございます@さくみ! – gabyneko

0

代わりnative JSON data typeのための新しいサポートでMySQL 5.7を使用したい場合があります。その後、カスタムフィールドを作成することができます。

あなたが話しているデザインは、Entity-Attribute-Value modelと呼ばれています。私は実際にはデータモデルとしての資格を有すると論じていますが。それは基本的に、リレーショナルデータベースに実装され、非リレーショナルなソリューションですので、

は、EAVには多くの問題があります。

便利な読書:

しかし、一番下の行は、あなたが基本的に自分の列と種類についてのメタデータの独自のシステムを作成することになりますということです - 基本的に、RDBMS内に独自のデータベース管理システムを実装することは、多くの作業を必要とし、途中でたくさんのバグがあります。これはInner-platform Effectと呼ばれる:

...ソフトウェアアーキテクトの傾向は、彼らが使用しているソフトウェア開発プラットフォームのレプリカ、およびしばしば貧しいレプリカ、なるようにカスタマイズ可能なシステムを作成します。

関連する問題