2

我是数据库设计的新手,我确实有几个问题要问你们如何创建关系数据库。

我有几个问题:

通过外键连接Table ATable B,我在哪里创建一个键Table AB

可以说我确实有桌子Users并且Ranks有 1 : 1 的关系。

Users桌子:

    CREATE TABLE [dbo].[Users](
    [ID] [bigint] IDENTITY(1,1) NOT NULL,
    [Email] [nvarchar](89) NOT NULL,
    [Name] [nvarchar](25) NOT NULL,
    [Midname] [nvarchar](25) NOT NULL,
    [Surname] [nvarchar](25) NOT NULL,
    [Phone] [varchar](15) NOT NULL,
    [Country] [smallint] NOT NULL,
    [Manager] [nvarchar](89) NOT NULL,
    [Referrer] [nvarchar](89) NOT NULL,
    [Rank] [tinyint] NOT NULL,
       CONSTRAINT [PK_UsersID] PRIMARY KEY CLUSTERED 
       ([Email] ASC)
    )

Ranks桌子:

    CREATE TABLE [dbo].[Ranks](
    [ID] [tinyint] IDENTITY(1,1) NOT NULL,
    [Rank] [nvarchar](50) NOT NULL,
      CONSTRAINT [PK_Rank] PRIMARY KEY CLUSTERED 
      ([ID] ASC)
    )

我想通过以下方式加入他们:

Users.Rank ON Rank.ID

但它不允许我创建密钥,我收到这样的错误:

Microsoft SQL Server 管理工作室

表“用户”中的列与现有主键或唯一约束不匹配。

为什么它告诉我任何主键?我没有触及我正在使用外键的主,我不明白为什么 PK 和 FK 相关。

你能解释一下我做错了什么吗?

谢谢!

4

3 回答 3

3

我可以使用以下方法创建外键:

ALTER TABLE dbo.Users ADD CONSTRAINT
    FK_Users_Ranks FOREIGN KEY
    (
    Rank
    ) REFERENCES dbo.Ranks
    (
    ID
    )

像这样加入他们:

select
    *
    from Users           u 
        INNER JOIN Ranks r ON u.rank=r.id

我建议IDENTITY(1,1)从 Ranks.ID 中删除。由于值很少(tinyint),最好自己管理 ID。您可以插入 ID 为 10、20、30、40 的等级。稍后如果需要,如果需要在 10 到 20 之间添加新等级,可以添加 15。有了身份,您就被锁定了。

确保如果您的表中当前有数据并尝试添加 FK,则在添加 FK 之前,所有 Users.Rank 值都存在于 Rank.ID 中。

于 2012-05-31T13:17:54.063 回答
1

Users.Rank ON Rank.ID this is correct but if Users.Rank is int, Rank.ID should be int too, or it will generate errors.

Primary key for persons is for example Personal ID, or email, or name+lastname+age or somthing else..., but in databases this ID -is often integer type. if you have person table, you should have columns personid, name, lastname, ... ,

when you use that personid in another table it becomes foreign key. for ex. if you have phonenumber table you wiil have these column

numberid, prefix, number, and personid - now this personid is FK. FK type = PK type

you can do this in database diagram simply: first drag by hand primary key field to the foreign key table: drag by hand primary key field to the foreign key table than

than look at the dialog and click ok :) enthan look at the dialog and click ok :)e

于 2012-05-31T13:09:27.887 回答
0

您是否在“正确的方向”创建外键?根据错误消息,我冒昧地猜测您正在尝试在以下位置创建关系:

  • 选择主键表为Users,列为Rank
  • 选择外键表为Rank,列为ID

这意味着“键”Users.Rank 将被导出到 Rank 表,这是不可能的,因为 Users.Rank 列不是 Users 表的键。

外键应该在另一个方向:

  • 主键表是Rank,列ID
  • 外键表是Users,coulmn Rank

这将创建一个一对多的键,其中用户表中的许多行可以具有相同的排名。如果你真的想建立一对一的关系,你必须在 Users.Rank 列上创建一个唯一索引(或约束)。

于 2012-06-01T12:25:06.777 回答