当前位置: 首页 > 面试题库 >

SQL VIEW应该始终在1NF中吗?

籍弘伟
2023-03-14
问题内容

SQLVIEW是一个全局逻辑表,该表可能会持久化也可能不会持久化。但这仍然是一张桌子。因此,VIEW是否应始终遵循第一范式(1NF)?也就是说,没有重复的行,仅是标量类型,没有从上到下或从左到右的顺序,等等。较高的范式怎么办?

对我来说,我的应用程序“使用”存储的proc的结果,我的VIEWs被SQL查询“使用”,并且这两种用法是互斥的(即,我不使用SQL查询存储的proc的结果集,而我的应用程序则不包含SQL代码)。我已经看到其他人使用VIEW将一列中的多个值“连接”为单行,通常以逗号分隔格式。针对此类列在SQL查询中编写谓词需要类似以下的语句:

',' + concat_col + ',' LIKE '%' + ',' + search_value + ',' + '%'

因此,在我看来,可以查询的所有表仅由标量类型组成似乎是合理的。我是否会因为这种想法而变得过于“纯粹”?


问题答案:

确保将您的视图标准化为至少1NF是非常有意义的。例如,允许重复具有以下缺点:视图的含义不明确,并且用户可能会误识别信息。如果基于此类歧义更新表,则可能会出现不正确的数据。

EFCodd不一定同意。在他的RM第2版书中,他提议允许视图不带键-
我认为这是一个大错误。Codd的视图实际上不允许重复,但它们允许每一列都可以为空,因此没有键且不在1NF中。

包含逗号分隔列表的字符串值本身并不违反1NF。字符串值与其他任何值一样都是标量,无论它包含什么。大多数SQL DBMS不允许多值属性。



 类似资料:
  • 问题内容: 在编写自己的类时,是否总是有必要重写? 如果我不这样做,它将自动检查所有字段是否相同?还是只是检查两个变量是否指向同一个对象? 问题答案: 如果正在编写将要以某种方式比较其对象的类,则应重写和方法。 不提供显式方法将导致从超类继承该方法的行为,并且在超类为类的情况下,它将成为Java API规范中针对该类设定的行为。 提供方法的一般约定可以在该类的文档中找到,特别是and 方法的文档。

  • 我希望我的Javafx组件,如标签、单独包装在vbox中的文本字段,即使调整了大小,也保持在窗口的中心。请参阅附件中的图片。目前,这些成分包含在锚烷中。下面给出了FXML文件代码。请告诉我怎么做。谢谢 组件位于中间的小尺寸窗口的图像。 全尺寸窗口,但部件位置不变。

  • 问题内容: 使用SQL语句时,出于兴趣,我应该始终使用完全限定的列名(tablename.columnname),即使仅使用一个表,例如 问题答案: 如果这样做会更好,因为它不会增加任何复杂性,并且可以防止将来发生错误。 但是,在一个良好定义的系统,你不应该 有 -它就像在编程语言的命名空间。理想的情况是不要有冲突,但是会过多使用显式名称,从而使代码混乱。

  • SQLView 提供了界面友好的 SQL 数据库的浏览和表编辑功能,该工具不是作为数据库管理工具,主要用来查看和修改 SQL 表结构和数据。

  • 问题内容: 可以从许多线程访问类。在这种情况下,必须是记录器还是最终的和静态的?谢谢。 问题答案: 所有主要的Java日志记录程序包(等)都是同步的并且是线程安全的。即使从多个线程调用该类,每个类的记录器的标准模式也可以。

  • 问题内容: 我在网上找不到任何参考资料。但是只是想知道类中的最终字段应该一直还是只是一个约定。基于对它们的用法的理解,我觉得这比语言所强加的东西更合乎逻辑。 问题答案: 当然不是。如果它们属于该类,则必须是静态的;如果它们属于该类的实例,则必须是静态的: