【问题标题】:text input or select?文本输入还是选择?
【发布时间】:2013-03-02 09:43:11
【问题描述】:

在为私立学校创建学生管理应用程序时,添加学生时用户必须指定学生来自哪个公立学校,然后应用程序根据学生来自的学校显示有关学生的信息,问题是face 是当用户为同一所学校输入不同的名称时(例如:“abc-paris”、“abc/paris”和“abc paris”将被视为 3 个不同的学校,而不是),我想到的解决方案是进行选择而不是示例文本输入(在 html 中),但我发现这是一个糟糕的解决方案,因为:

  • 学校列表将来可能会发生变化,所以我需要创建一个 包含学校名称的数据库表。
  • 我需要做一些额外的工作来管理(添加、删除)一所学校。
  • 我发现创建一个只包含一列的数据库表很糟糕。

那么你有什么更好的办法解决这个问题吗?

【问题讨论】:

    标签: database user-input


    【解决方案1】:

    听起来您的数据模型没有标准化。我认为您应该在查找表中列出学校。学校和学生之间应该是一对多的关系。在用户界面上,学校应该是一个下拉框而不是文本框。

    这是一个建议的表结构:

    CREATE TABLE School (ID int identity, Name varchar(30), primary key (ID))
    CREATE TABLE Student (ID int, SchoolID INT, primary key (ID),
    FOREIGN KEY (SchoolID) REFERENCES School(Id))
    
    INSERT INTO School (Name) VALUES ('School1')
    INSERT INTO School (Name) VALUES ('School2')
    INSERT INTO School (Name) VALUES ('School3')
    
    INSERT INTO Student (id,SchoolID) VALUES (1,1)
    INSERT INTO Student (id,SchoolID) VALUES (2,1)
    INSERT INTO Student (id,SchoolID) VALUES (3,2)
    INSERT INTO Student (id,SchoolID) VALUES (4,3)
    INSERT INTO Student (id,SchoolID) VALUES (5,3)
    INSERT INTO Student (id,SchoolID) VALUES (6,3)
    

    请注意,有两所学校和六名学生。其中两名学生上学 1,一名学生上学 2,三名学生上学 3。

    用户界面应包含一个下拉框,供用户选择学校,即 SELECT ID、Name FROM School。名称应显示在每所学校的下拉框中,以及用于选择学校/将学校插入数据库的 ID。

    【讨论】:

    • 学校只包含一个信息(一列),这就是为什么我把它作为一列放在学生表中的原因,是否有任何规范数据库模型的规则说它是错误的将学校名称放在学生表中
    • @user2080105,我已经用建议的表格结构编辑了我的答案。请注意,您必须将两个表的自动标识设置为 on。如果您不知道该怎么做,请告诉我。
    • 谢谢,但还有一个更重要的问题,如果我确定名称是唯一的(没有同名的学校),为什么还要为 School 表使用 id,所以学校name 可以作为主键正常工作,无需添加额外的属性(id)!
    • 如果不分隔表格,可能会出现数据质量错误,例如,如果一个用户进入 Scool1,另一个用户进入 Skhool1,另一个用户进入 School1,会发生什么情况。这是一所学校的三个单独的记录。学校名称在功能上不依赖于学生 ID。
    • 我同意分离,但是为什么学校表包含2列而不是1列,如果学校名称可以作为主键正常工作,为什么要添加属性id
    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 2011-01-30
    • 2017-08-26
    • 2016-08-14
    • 2017-08-09
    • 2014-10-31
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多