SQL Server中的主键主要用于唯一辨识此表中的记录的唯一性,也就是,在此表中只有主键属性值的唯一一条记录,也就是数据库原理中讲的数据的唯一性,外键用于和附表建立关系,假如在一个主表中还嵌套有一个表的话就用的着了,成立三维表,三维表中除主键外加进外键和主表中的主键建立关系,保证两个表中数据的统一性,小弟明白???

解决方案 »

  1.   

    Mailbomb(网络咖啡) 说的好!我的经验是,外键尽量避免使用,否则程序调试起来很麻烦,主键是个好东东。
      

  2.   

    我個人不提倡用外鍵.外鍵只是增加表與表之間的約束而已.
    如果你的邏輯很清楚的話.
    你完全可以用觸發器或者程式控制來完成這種約束.加上外鍵真的是很不方便,而且會使SQL的执行效率降低.
    (當然觸發器也會降低執行的效率)
      

  3.   

    wsdrex:查詢條件複雜不要緊。只要你用到了群聚索引就會快(有主鍵的表,主鍵包含的字段就是群聚索引)。
    比方說a表有4個字段:
    a1
    a2
    a3
    a4
    其中a1,a2是群聚索引
    如果你的查詢這樣寫的話:
    select * from a where a3 = ...... and a4 = ......不妨改成:
    select * from a where a3 = ...... and a4 = ...... and a1 <> ''
      

  4.   

    to zhuzhichao(炎龙骑士团—索尔—破龙击):
    探讨一下:
    我个人主张多用外键。理由如下:
    1、外建表达的是参照完整性:这是数据固有的,与程序无关。因此,应该交给DBMS来做。
    2、使用外建,简单直观,可以直接在数据模型中体现,无论是设计、维护等回有很大的好处,特别是对于分析现有的数据库的好处时非常明显的--前不久我分析了一个企业现有的数据库,里面的参照完整性约束有的是外键描述,有的是用触发器实现,感觉很明显。当然,文档里可能有,但是也可能不全,但是外键就非常明显和直观。
    3、既然我们可以用触发器或程序完成的这个工作(指参照完整性约束),DBMS已经提供了手段,为什么我们要自己去做?而且我们做的应该说没有RDBMS做得好。实际上,早期的RDBMS并没有外键,现在都有了,我认为数据库厂商增加这个功能是有道理的。从这个角度来说,外键更方便。
    4、关于方便,根据我带项目的情况来看,程序员确实有反映,主要是在调试时输入数据麻烦:如果数据可以违反参照完整性,那么就是说参照完整性本身就不对名誉业务冲突,此时也不应该用触发期货程序实现;否则,说明数据是错误的,根本就不应该进入数据库!而且,这也应该是测试系统的一个内容:阻止非法数据。实际上,前台程序应该对这种提交失败做出处理。数据是企业的而非程序的,储程序要尽量与数据分离,反之亦然。
      

  5.   

    to  SE1() :你說的也是有道理的。這個問題就如同藍兄說的那樣,存在就是合理。我只是提出我個人的看法而已,因為外鍵的存在,調試變得很麻煩。而且現在3層結構居多,商務邏輯等都可以放到業務層去處理。對於DB的升遷也是有好處的。