sql >> データベース >  >> RDS >> Mysql

mysqlテーブル構造の提案?

    いいえ、これはリレーショナルデータベースの設計としては不適切です。これは、Entity-Attribute-Valueの例です。 設計。柔軟性はありますが、リレーショナルデータベースであるということの意味に関するほとんどのルールに違反しています。

    柔軟なデータベースのソリューションとしてEAVの設計に取り掛かる前に、次のストーリーを読んでください。悪いCaRMa

    具体的には、EAVの問題には次のようなものがあります。

    • 特定のID_NUMにどの属性が存在するかは、クエリを実行しないとわかりません。
    • NOTNULLに相当する属性を必須にすることはできません。
    • データベース制約を使用することはできません。
    • SQLデータ型は使用できません。 value 列は長いVARCHARである必要があります。
    • 特にMySQLでは、各VARCHARは独自のデータページに保存されるため、これは非常に無駄です。

    EAVデザインを使用する場合、クエリも非常に複雑になります。オープンソースのeコマースプラットフォームであるMagentoはEAVを幅広く使用しており、多くのユーザーは、カスタムレポートが必要な場合、クエリを実行するのは非常に遅く、難しいと言っています。

    リレーショナルにするには、それぞれの異なる属性を、独自の名前と適切なデータ型を使用して、独自の列に格納する必要があります。

    プレゼンテーションでEAVについて詳しく書いています実用的なオブジェクト指向SQLのモデル 私のブログ投稿では、 EAV FAIL 、そして私の本では、 SQLアンチパターン:データベースプログラミングの落とし穴を回避する



    1. Mysqlによる削除順序

    2. Oracleの存在しない場合の挿入ステートメント

    3. androidでsqlitedbを正しく設定する

    4. mysqlエラー1364フィールドにデフォルト値がありません