代码之家  ›  专栏  ›  技术社区  ›  User

数据库设计:多个“选项”表与单个表

  •  0
  • User  · 技术社区  · 17 年前

    我相信我们所有人都以这样或那样的形式看到了这个设计要求。

    现在。

    50+50的桌子和这个一样好吗?

    CREATE TABLE [dbo].[Setting1]
    (
        [ID] uniqueidentifier NOT NULL,
        [Name] varchar(max) NOT NULL
    )
    
    CREATE TABLE [dbo].[Setting2]
    (
        [ID] uniqueidentifier NOT NULL,
        [Name] varchar(max) NOT NULL
    )
    

    等。

    CREATE TABLE [dbo].[UserSettings]
    (
        [UserID] uniqueidentifier NOT NULL,
        [Setting1ID] uniqueidentifier NOT NULL,
        [Setting2ID] uniqueidentifier NOT NULL
    )
    

    还是创建一个“主”选项表更明智?

    CREATE TABLE [dbo].[Setting]
    (
        [ID] uniqueidentifier NOT NULL,
        [Name] varchar(max) NOT NULL
        [SettingCode] int NOT NULL
    )
    

    除了在第一种情况下必须将结构相似的表相乘,而在另一种情况下没有完整性约束,还有什么优点和缺点?

    3 回复  |  直到 17 年前
        1
  •  3
  •   ajh1138    17 年前

    我会选择最后一个选项,查找表,但命名方案略有不同。。。

    设置

    设置ID-主键
    设置名称


    用户设置


    设置ID

        2
  •  1
  •   sydarex    17 年前

    我喜欢这样解决这个问题:

    Users(UserID, ...)
    Settings(SettingID, SettingFieldName, ...)
    UserSettings(UserdID, SettingID, Value)
    

    但我不知道这在理论上是否正确。我通常是这样做的,我觉得这很好。

        3
  •  0
  •   MarcE    17 年前

    像这样的问题总是会有主观的答案,但就我个人而言,有那么多单独的设置,我可能会做一些横向的事情,比如将它们存储在一个XML文件中,并将其保存到与用户相关联的数据库中(使用BLOB类型的字段,这样就不会遇到任何varchar长度限制)。