对我来说,到目前为止,关于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。
一些注意事项:
所以: