0

私は非正規化の定義を行っていましたが、冗長なデータを追加すると複雑な結合を取り除くことができますか?どのように冗長データを追加すると、非正規化で複雑な結合を取り除くことができますか?

+2

データが完全に非正規化されている場合、参加するものはありません。 –

+0

@Oilver簡単な質問です。すべてが非正規化データの1つのテーブルにありますか? –

+0

あなたが与えた「非正規化」の定義は何ですか? – philipxy

答えて

0

は、次の2つの関係を考えてみましょう:

Department (department_id PK, department_name, manager_employee_id) 
Employee (employee_id PK, employee_name, department_id) 

が上司の名前と一緒に従業員の名前のリストを取得するには、我々は次のようなクエリ必要があります:場合は、今すぐ

SELECT e.employee_name, m.employee_name AS manager_name 
FROM Employee AS e 
INNER JOIN Department AS d ON e.department_id = d.department_id 
INNER JOIN Employee AS m ON d.manager_employee_id = m.employee_id 

を推移的な関数依存性employee_id -> department_id -> manager_employee_id -> employee_nameをEmployeeテーブルに非正規化すると、テーブルは次のようになります。

Department (department_id PK, department_name, manager_employee_id) 
Employee (employee_id PK, employee_name, department_id, manager_employee_id, manager_name) 

実際には、冗長性が慎重に同期されていないとデータの一貫性が損なわれる可能性があるため、これは良い設計ではない可能性があります。しかし、この例では、そのリスクを無視します。新しいテーブルで

、我々は今、このような従業員と管理者の名前のリストを取得することができます。

SELECT employee_name, manager_name 
FROM Employee 

冗長性は、いくつかのクエリをより簡単に表現することを助けることができるが、それはデータの矛盾のリスクを導入することができます慎重に考慮され、制御される必要があります。また、ディスク上のページに収まる行が少なくなるため、冗長性にはより多くの記憶領域が必要になり、クエリが遅くなります。一方で、結合や計算を削除することでクエリを高速化することができ、一貫性を維持するために使用することもできます。それぞれの場合は、それぞれのメリットを考慮する必要があります。

関連する問題