最有效(用于读取)与EF4建立一对多关系的方式

时间:2010-07-30 10:52:45

标签: .net database performance entity-framework database-design

这是一个相当简单的问题(或至少从一开始就应该如此)。

我正在寻找建立一对多关系的有效方法,其中许多是同一类型。

示例

假设我们有一个人员实体,这个人有0到多个子人,而子人有0或1个父人。

答案应该考虑阅读优化和查询从Linq到Entity Framework的简单性。有关最佳读取性能的基础数据库表结构的答案也非常受欢迎(只要它们可以通过EF4映射到它们)。

1 个答案:

答案 0 :(得分:1)

这看起来像是一个自引用外键的情况。 (Oracle)的

一个常用的例子是Employee-Manager关系。 给定的员工可以是经理(对其他员工),也可以有经理(或者不是,如果他是老板)。

表定义和约束定义就是这样。

CREATE TABLE EMP
(
  EMPNO     NUMBER(4)                           NOT NULL,
  ENAME     VARCHAR2(10 BYTE),
  JOB       VARCHAR2(9 BYTE),
  MGR       NUMBER(4),
  HIREDATE  DATE,
  SAL       NUMBER(7,2),
  COMM      NUMBER(7,2),
  DEPTNO    NUMBER(2)
)

,约束将是......

alter table emp add constraint fk_emp_mgr
foreign key mgr references emp(empno);

这表明给定员工的经理ID必须是他自己的员工。 这是样本数据。

EMPNO ENAME JOB MGR

7369 SMITH CLERK 7902
7499 ALLEN SALESMAN 7698
7521 WARD SALESMAN 7698
7566 JONES MANAGER 7839
7654 MARTIN SALESMAN 7698
7698 BLAKE MANAGER 7839
7782 CLARK MANAGER 7839
7788 SCOTT ANALYST 7566
7839 KING PRESIDENT 
7844 TURNER SALESMAN 7698
7876 ADAMS CLERK 7788
7900 JAMES CLERK 7698
7902 FORD ANALYST 7566
7934 MILLER CLERK 7782

如您所见,所有员工都有一位经理(除了公司老板的KING之外)。 他们每个人都是一名员工。

请注意,这是适合OLTP样式系统的模型。没有冗余数据和数据完整性约束。