【问题标题】:SQL Database design help needed需要 SQL 数据库设计帮助
【发布时间】:2010-11-11 14:01:39
【问题描述】:

我正在尝试限制我的数据库中的表的数量,因为我听说这很好(我是一个新手 Web 开发人员)。我想让用户在数据库中输入一个列表。所以他们输入一个标题,整体评论,然后开始制作列表。如果不为每个列表创建一个新表,我无法弄清楚如何做到这一点。因为,假设一个用户想要一个包含 44 个值的列表,而另一个用户想要一个包含 10 个值的列表。如果不为每个列表创建一个新表,我想不出该怎么做。我非常感谢您能给我的任何帮助/见解。

【问题讨论】:

    标签: sql-server optimization database-design


    【解决方案1】:

    基本上,您想为用户列表创建一个表,其中表中的每一行引用一个用户的列表,另一个表用于用户列表值,其中表中的每一行都有一个列用于引用它所属的列表,以及用户输入值的列。

    【讨论】:

      【解决方案2】:

      您的餐桌可能是: 用户 ID,整数 ListID, int(主键唯一标识符) 标题, VarChar(250) 注释,VarChar(MAX)

      Example Content:
      1  | 1  | The Title        | My Comment
      1  | 2  | The Other Title  |  My other comment
      2  | 3  | First Comment    | Second Person, first comment
      

      每个用户只需从查询中获取他们的列表:

      从 the_Table 中选择 ListID、Titel、Comment 其中用户 ID = @UserID

      【讨论】:

        【解决方案3】:

        您可以为所有列表使用单个行表,例如简单地说

        CREATE TABLE ListLines (
            listID INTEGER,
            lineNo INTEGER,
            line TEXT,
            PRIMARY KEY (listID, lineNo),
            FOREIGN KEY (listID) REFERENCES Lists
        );
        

        列表变成:

        CREATE TABLE Lists (
            listID INTEGER PRIMARY KEY,
            userID INTEGER,
            title TEXT,
            comment TEXT,
            FOREIGN KEY (userID) REFERENCES Users
        );
        

        假设您有一个带有主键 userID INTEGERUsers 表,其中包含每个用户的信息(姓名等)。

        所以要得到一个给定 ID 的列表的所有行

        SELECT line FROM ListLines
         WHERE listID=:whateverid
        ORDER BY lineNo;
        

        或者您可以将其与例如 UNION标题:

        SELECT title AS line FROM Lists
         WHERE listID=:whateverid
        UNION ALL
        SELECT line FROM ListLines
         WHERE listID=:whateverid
        ORDER BY lineNo;
        

        等等。这种灵活高效的安排就是关系型的做事方式……

        【讨论】:

          猜你喜欢
          • 2023-03-24
          • 1970-01-01
          • 2011-07-17
          • 2011-03-25
          • 2011-07-23
          • 1970-01-01
          • 2014-08-02
          相关资源
          最近更新 更多