【问题标题】:Need advice on table relations需要有关表关系的建议
【发布时间】:2013-02-25 22:57:46
【问题描述】:

我有一张桌子Users

    [UserId] [int] IDENTITY(1,1) NOT NULL,
    [UserName] [nvarchar](20) NOT NULL,
    [Email] [nvarchar](100) NOT NULL,
    [Password] [nvarchar](128) NOT NULL,
    [PasswordSalt] [nvarchar](128) NOT NULL,
    [Comments] [nvarchar](256) NULL,
    [CreatedDate] [datetime] NOT NULL,
    [LastModifiedDate] [datetime] NULL,
    [LastLoginDate] [datetime] NOT NULL,
    [LastLoginIp] [nvarchar](40) NULL,
    [IsActivated] [bit] NOT NULL,
    [IsLockedOut] [bit] NOT NULL,
    [LastLockedOutDate] [datetime] NOT NULL,
    [LastLockedOutReason] [nvarchar](256) NULL,
    [NewPasswordKey] [nvarchar](128) NULL,
    [NewPasswordRequested] [datetime] NULL,
    [NewEmail] [nvarchar](100) NULL,
    [NewEmailKey] [nvarchar](128) NULL,
    [NewEmailRequested] [datetime] NULL

此表与Profiles 具有1 对1 关系

    [UserId] [int] NOT NULL,
    [FirstName] [nvarchar](25) NULL,
    [LastName] [nvarchar](25) NULL,
    [Sex] [bit] NULL,
    [BirthDay] [smalldatetime] NULL,
    [MartialStatus] [int] NULL

我需要将user 连接到数据库中的所有其他表,所以最好:
1) 建立从Users 到其他表的关系?
2) 建立从Profiles 到其他表的关系?

【问题讨论】:

  • “连接”是什么意思?您是在谈论构建查询以从包含 [UserID] 列的所有表中提取信息,还是您的意思是从其他表中设置外键?
  • 在另一个表中设置外键。建立表格之间的正常关系。

标签: sql-server database database-design relational-database


【解决方案1】:

由于表 [Users] 包含 Identity 值,因此是 [UserID] 值的来源,我将创建所有外键返回给它。从性能的角度来看,假设您在 [UserID] 列上设置了两个表的聚集索引,那么性能影响应该很小。

从技术上讲,我认为 [Users] 表每行可以包含更多数据,因此索引可以跨越更多页面,并且查找时可能存在毫秒差异,但我认为将其关联回创建的表更有意义[UserID] 并且名称相似。也就是说,你真的可以做到。

【讨论】:

    【解决方案2】:

    如果Profiles 的PK 是Users 的FK,我将保持一致性并使用Users 作为跨数据库其他关系的父表。

    但是,如果是真正的一对一而不是一对零或一对一的关系,那也没关系。

    另一个考虑因素是任何应用程序如何访问此数据库中的数据。应用程序是否使用 OR/M 之类的实体框架,它知道 FK 关系?如果是这样,请考虑使用具有基于子表的查询最常访问的列的表。例如,一个应用程序可能会到处显示Profiles.LastNameProfiles.FirstName,并且很少从Users 表中读取任何内容。在这种情况下,您将通过在 Profiles 表上建立关系来为您的数据库节省一些 I/O,并为您的开发人员节省一些击键。

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 2022-01-26
      • 2015-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 1970-01-01
      • 2018-07-07
      • 1970-01-01
      相关资源
      最近更新 更多