Django モデルを使用して、多数の非正規化テーブルから情報を抽出しようとしています。テーブルは既存のものであり、レガシー MySQL データベースの一部です。
スキーマの説明
各テーブルが人物の特徴を記述し、各人物に名前があるとします (これは本質的に人物を識別しますが、統一された「人物」テーブルには対応しません)。例えば:
class JobInfo(models.Model):
name = models.CharField(primary_key=True, db_column='name')
startdate = models.DateField(db_column='startdate')
...
class Hobbies(models.Model):
name = models.CharField(primary_key=True, db_column='name')
exercise = models.CharField(db_column='exercise')
...
class Clothing(model.Model):
name = models.CharField(primary_key=True, db_column='name')
shoes = models.CharField(db_column='shoes')
...
# Twenty more classes exist, all of the same format
SQL 経由でアクセスする
生の SQL では、すべてのテーブルの情報にアクセスしたい場合、一連の醜いs を実行し、句OUTER JOIN
でそれを洗練します。WHERE
SELECT JobInfo.startdate, JobInfo.employer, JobInfo.salary,
Hobbies.exercise, Hobbies.fun,
Clothing.shoes, Clothing.shirt, Clothing,pants
...
FROM JobInfo
LEFT OUTER JOIN Hobbies ON Hobbies.name = JobInfo.name
LEFT OUTER JOIN Clothing ON Clothing.name = JobInfo.name
...
WHERE
Clothing.shoes REXEGP "Nike" AND
Hobbies.exercise REGEXP "out"
...;
モデルベースのアプローチ
これを Django ベースのアプローチに変換しようとしています。このアプローチでは、QuerySet
すべてのテーブルから情報を引き出すことが簡単にできます。
OneToOneField
( example )を使用して、1つのテーブルに他のテーブルと関連付けるためのフィールドを作成することを検討しました。ただし、これは、1 つのテーブルが「中央」テーブルを必要とし、他のすべてのテーブルが逆方向に参照することを意味します。これは 20 数個のフィールドでごちゃごちゃしているように見え、実際には回路図の意味がありません (「ジョブ情報」はコア プロパティですか? 服ですか?)。
私はこれについて間違った方法で進んでいるように感じます。QuerySet
各テーブルにすべてのテーブルに共通の 1 つの主キー フィールドがある場合、関連するテーブルに を構築するにはどうすればよいですか?