次の点について、データ モデリングと SQL (OOP と Select ステートメント) の概念について意見をお聞かせください。
<php? | <% | <#
Class Country{
_name:String;
_language:String;
}
Class Estate{
_name:String;
_country:Country;
}
?> | % | #>
私が取得しようとしているポイントは、単純な親子関係です。現在、ExtJS + PHP と JSF 2.0 (コンバーターを使用する Java) での作業を見てきましたが、DAO (データ アクセス オブジェクト) が次のように定義されているのを見るのは非常に一般的です。
Abstract class CountryDAO{
public function getCountry();//This function returns an ArrayList.
public function getCountryById(countryId:Integer);//This function returns a Country Object;
...
}
Class EstateDAO{
public function getEstate(){
$sql = "SELECT * FROM tbl_estate";
//[your favorite way to comunicate with the database here]
//Declare an ArrayList or something to store the result:
$arrayList;
while($result = $ResultSet.next()){
$obj = new Estate();
$obj->name = $result['name'];
$obj->Country = new CountryDAO().getCountryById($result['country_id']);
$arrayList->addItem($obj);
}
}
}
言語の構文を混在させて申し訳ありません。言語に執着しすぎないようにしています。概念だけです
ここで私の考えを締めくくります。理論によれば、それは正しい概念です。個人的には、それが物事の論理であるため、それに反対するのは正しくないと思います. しかし、実際には、現実の世界はあなたが望むように輝くことはありません。
10 個のエステートがある場合、11 個の SQL ステートメントがハード ディスク レベルで実行されます (オペレーション システムの理論によれば、これはあらゆる種類の保存メモリの中で最も遅いものです)。
100 個のエステートがある場合、101 個の SQL ステートメントが実行されます。
エステートがn 個ある場合、 n+1 個のSQL ステートメントが実行されます。
最後のポイント: 何千ものレコードを持つ可能性のあるデータ エンティティをモデル化している場合、これは非常に苦痛になる可能性があると思います。そのような考えから、Flex + PHP を使用する際に、この種の設計ロジックを使用することを拒否しました。しかし今、Flex と ExtJS の両方をビューアーとして、PHP をサーバーサイドとして持つアプリケーションを構築しようとしているので、取るに足らない理由で最も難しいパスを選択していないことを確認したいだけです。この MVC/OOP ロジックを尊重しない方が安全ですか? 私は誇張していますか?OOP での SQL 対データ モデルについてどう思いますか?
ありがとう。