【发布时间】:2012-08-01 10:32:49
【问题描述】:
我有一个名为Persion 的现有表。在这张表中,我有 5 列:
- persionId
- Pname
- PMid
- 产品说明
- 帕姆特
创建此表时,我将PersionId 和Pname 设置为主键。
我现在想在主键中再包含一列 - PMID。我怎样才能写一个ALTER 声明来做到这一点? (我表里已经有1000条记录了)
【问题讨论】:
-
你确定吗?这意味着您可以在表中拥有重复的
personId。这反过来意味着,如果您仅在此键上从事务(多)类型表连接到该表,您将获得重复记录,从而导致事务记录的“重复计数”。 -
确实,这是一个非常糟糕的主意。你的PK应该在“persionId”上,就是这样
-
我认为应该只将表中的一列设置为主键?
-
@ChristopheHarris,有时将多列作为主键是有意义的。一对多或多对多关系表可能有 2 个或更多外键列构成主键,因为只有知道所有主键的值才能唯一标识一条记录列。然而,就 OP 而言,这不太可能是他真正想要的。
-
@Kristen Hammack 即使在 M2M 关系的情况下,最好让中间表有一个单独的主键,然后在两个外键上放置一个唯一的约束。
标签: sql sql-server sql-server-2008 constraints primary-key