小编典典

我一直在搞乱1NF

sql

对我来说,到目前为止,关于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张桌子或任何东西


阅读 158

收藏
2021-04-14

共1个答案

小编典典

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

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

一些注意事项:

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

所以:

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