我想抓住1NF,我想知道下面的表是1NF還是不是。我將假定no,因爲在列中,first_name,last_name和full_name可以重複,因此需要轉移到具有列user_id和first_name,last_name和full_name的新表。下面的圖片是參考數據庫的屏幕截圖。第一範式和名字和姓氏
回答
它當然可以。
如果第一個標準是正常的話,那麼你現在的設計說的是一個單一的「實體」(讓我們稱它爲一個人)與一個且只有一個用戶記錄相關聯。
如果您將名稱字段移動到單獨的表中,您基本上說的是,一個「人」可能與一個或多個用戶記錄相關聯,並且該人在更新其姓名時應該使同樣改變所有的「用戶」的
如果你需要這樣的結構,表看起來更像:
user_id|username|password|email|person_id
,你將有一個單獨的表中的每個「人」
person_id|first_name|last_name|full_name
第一個正常不是複製數據。只要查看名字,很可能會有許多名爲「Bob」或「Alice」的人只是因爲數據一遍又一遍地重複出現,與說表格有重複數據不一樣。重點是每個記錄應該是原子的。
太棒了,謝謝!表格的建議將幫助我理解它。 – jason328
1NF是關於原子性,而不是冗餘(這是更高的正常形式是關於)。實質上,如果所有屬性都是原子的,那麼表格就是1NF。
顯然,表是否在1NF取決於你定義爲「原子」。什麼「原子」,其實就是一個有些爭議的問題,但我在這裏採取務實的案件逐案的做法,並簡單地問:
在我試圖解決這個問題的背景下,它是否有意義訪問價值的任何部分,或者我總是訪問整個值?
如果我總是訪問整體,那在特定的上下文中是原子的。
在你的例子中,很可能你想單獨訪問first_name
和last_name
,所以full_name
可能是非原子的,這就是違反1NF的原因。但是,如果你知道你永遠不需要分別訪問姓氏和名字,那麼你可以有只是full_name
,仍然沒有違反1NF。
「訪問」 的值應該相當廣泛理解這裏。它可能顯然意味着從數據庫中讀取它,但也可能意味着在約束中使用它,或索引它等等。
- 1. 名字和姓氏中的Split姓氏
- 2. 解析姓名爲第一名字和姓氏 - LINQ到實體
- 3. 用名字和姓氏查找姓名
- 4. 提取名字和姓氏
- 5. MVC User.Identity.Name,姓氏和名字
- 6. 搜索名字和姓氏
- 7. 正則表達式名字和姓氏
- 8. 格式名字和姓氏的寶石
- 9. 單名文本框中的名字和姓氏的姓氏
- 10. ACCESS2010檢索名字和姓氏的第一個字母
- 11. 分割名稱爲名字和姓氏
- 12. 格式化姓氏,名字
- 13. 將單個字段分隔成名稱,姓氏和姓氏
- 14. 串聯名字和姓氏作爲名稱,然後ommit Firtname和姓氏在SSIS
- 15. 更改姓氏,名字到姓氏,FirstInitial
- 16. 僅提取姓氏名字,姓氏
- 17. SQL Server - 在名字和姓氏字段中搜索姓名
- 18. 將姓名字段拆分成姓氏和名字
- 19. RegexValidator名稱和姓氏
- 20. 如何將姓名拆分爲名字和姓氏並在範圍中使用
- 21. 發現用戶的名字和姓氏?
- 22. 在AD中搜索姓氏和名字
- 23. RailsAdmin領域上的姓氏和名字
- 24. django queryset - 搜索名字和姓氏
- 25. 按姓氏和名字排序c#
- 26. 拆分姓氏和名字Netezza
- 27. NSPredicate檢測名字和姓氏
- 28. WordPress的獲取名字和姓氏
- 29. 搜索引擎的名字和姓氏
- 30. 試圖讓名字和姓氏
它可能是1NF,但它也可能不適用(取決於數據)。所有的xxxx_name字段都不能爲空,有些文化可能不具有* firstname/lastname。另外:路德維希·範·貝多芬要填寫什麼? – wildplasser
這是我最近碰到的東西。感謝您的提醒。 – jason328
這取決於你想要走多深。名稱實際上是名稱組件的組合,可隨時間變化。有些人只有名字,一些只有姓氏,一些人改變了他們的名字。 –