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

我一直在搞乱1NF

颜嘉誉
2023-03-14
问题内容

对我来说,到目前为止,关于1NF的最容易理解的描述是“主键是唯一标识每一行的一列(或一组列)”。在www.phlonx.com上,我了解到冗余意味着每个键的每一行不应超过1个值。大于1的值将是“多余的”。正确的?

尽管如此,我还是设法搞砸了很多次1
NF。我在这里为我的在线披萨店http://foo.com
披萨店
发布了一个问题

在这里我对第二范式感到困惑,只是注意到我在1
NF中开始出错。现在,我想我需要1NF中的3个键才能唯一地标识每一行。在这种情况下,我发现order_id,pizza_id和topping_id将为我做到这一点。因此,这是3列。因为如果您想知道哪个比萨饼是哪个比萨饼,则需要知道哪个order_id的比萨饼类型(pizza_id)和上面的馅料。如果您知道这一点,则可以查找其余所有内容。但是,从对上一个问题的回答来看,这似乎是错误的,因为topping_id转到了我不理解的另一个表中。这里是列的列表:

ORDER_ID
order_date的
CUSTOMER_ID
CUSTOMER_NAME
电话
促销
黑名单Y或N
Customer_address
ZIP_CODE

企业邮箱
Pizza_id
Pizza_name
尺寸
Pizza_price
金额
Topping_id
Topping_name
Topping_prijs
Availabitly
Delivery_id
Delivery_zone
Deliveryguy_id
Deliveryguy_name
交货Y或N

编辑:我用粗体标记了第一个串联键的ID。它们只是未标准化的列的列表。他们不是1张桌子或3张桌子或任何东西


问题答案:

使用对象角色建模(例如使用NORMA)来捕获有关设计的信息,按按钮,它会吐出SQL。

这比在1NF,2NF等之间来回切换要容易得多。保证ORM设计采用5NF。

一些注意事项:

  • 可以 有复合键
  • 可以 概念和逻辑设计 之后 添加代理键:您已经在前面添加了代理键,这很不好。由于RDBMS性能而不是在设计时添加它们
  • 阅读 过1NF的几种资料吗?
  • 从简单的英语和一些事实开始。这是ORM进行口头表达的方式。

所以:

  1. 客户有很多披萨(零到n)
  2. 比萨有很多浇头(零到n)
  3. 客户有地址
  4. 披萨有底


 类似资料:
  • 在我更新android Studio之前,一切都运行得很好。我正在使用Java开发我的应用程序,但现在当我尝试编译时,我得到了这个错误: 我不知道是什么原因造成的,但我怀疑这可能是更新重新定义的东西。如何删除此kotlin错误? PS:我真的没有使用kotlin在我的项目,所以我想知道为什么它显示这个错误。 先谢谢你,AFSC。

  • 问题内容: 为什么与模板类无关的集合会丢弃其类型?这是一个示例:(很抱歉,由于我感到困惑,因此无法编译。) 此代码在编译时引发错误: 如果我指定了Blike 的模板B ,或者如果我从B完全删除了模板,那么一切正常。 这是怎么回事? 编辑:人们指出没有必要使B通用,所以我添加到B 问题答案: 是的,众所周知的行为是,如果您使用原始类型,则该类上的所有类型参数都会丢失,而不仅仅是您未能声明的类型级别参

  • 一切都很好!除了我将它混合到中之外,所有集合的方法和其他隐式使用的东西在所有这些对象及其伴随类中现在显示错误,并显示如下消息: 不明确的隐式值:trait保存[T<:reactiveMongo.bson.handlers.bsonWriter[_<:traits.dbo]]=>T类型的方法writer和对象缓冲区[A]=>scala.collection.generic.canBuildFrom[

  • 我正在实施应用程序索引,我想我遗漏了一些东西,但我不知道是什么。 按照指南,我在应用程序中添加了我的意图过滤器,并实现了活动中需要的内容。 我的应用程序包是com。塔。hotelsclick和相关网站(由于我只是测试,我还没有在那里放置link rel meta标签)是www.hotelsclick。通用域名格式 我在指南中看到了下面的意图过滤器示例 所以我这样写我的: 另外,我写了一个内容提供程

  • 问题内容: 这是我有史以来的第一个servlet。这是代码。 我使用此命令对其进行了编译, 然后将文件放入WEB-INF文件夹中的classes文件夹中。 这是我的web.xml Tomcat7一直给我一个404的说法 文件树: 我在这里做错了什么? 问题答案: 您应该将servlet类放在包中。无包servlet是否起作用取决于旧版Tomcat和JVM版本的特定组合。如果您在书/教程中看到此示例

  • 这是我的扑动医生总结 flutter doctor医生总结(要查看全部详情,运行flutter doctor -v): [√] Flutter(渠道稳定,1.22.3,在微软Windows[版本10.0.19041.572],locale en-KE)[√]Android tool chain-develop for Android devices(Android SDK版本30.0.2) [!]