4

このサイトおよび他のサイトでの複数の質問は、テーブルの名前が列名である MySQL テーブル定義の使用に関連しています。

たとえば、DB の「メモ」の場合、次の構造を使用することを考えています。

CREATE TABLE IF NOT EXISTS `Notes` (
  `id` int(10) NOT NULL,
  `table` varchar(30) NOT NULL,
  `row_id` int(10) NOT NULL,
  `note` varchar(500) NOT NULL,
  `user_id` int(11) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

これはデータベースの設計が不十分であるということをあちこちで読み続けています。これはポリモーフィックアソシエーションと呼ばれるものであることがわかりました。ポリモーフィック アソシエーションは、特に SQL アンチ パターンとしてリストされています。(またはスライド内

アンチパターンの欠点を見てきましたが、私が考えることができるこれらのタイプのクエリを実行する必要はありません。

私のアプリでは、データベースのほぼすべての行にメモを書き込めるようにしたいと考えています。潜在的に数百の他の行の場合。

これが AntiPattern としてリストされている一方で、Ruby ActiveRecord の概念の基本的な部分のように見えるのは混乱を招きます。これをOKにする魔法をしているアクティブなレコードレイヤーですか?(つまり、DB レベルではなく、レコード レベルでのポリモーフィックな関連付け)?

具体的には、この SQL 設計を使用しても安全な場合/いつ使用するかを理解したいと思います。

-FT

4

0 に答える 0