คำถามติดแท็ก null

แนวคิดฐานข้อมูลที่ใช้เพื่อแสดงข้อมูลที่หายไปไม่ทราบหรือไม่เหมาะสม

8
ทำไมเราไม่อนุญาตให้ NULL
ฉันจำได้ว่าอ่านบทความนี้เกี่ยวกับการออกแบบฐานข้อมูลและฉันยังจำได้ว่าคุณควรมีคุณสมบัติเขตข้อมูลของ NOT NULL ฉันจำไม่ได้ว่าทำไมถึงเป็นเช่นนั้น สิ่งที่ฉันคิดได้ก็คือในฐานะนักพัฒนาแอปพลิเคชันคุณไม่ต้องทดสอบค่า NULL และค่าข้อมูลที่ไม่มีอยู่ (ตัวอย่างเช่นสตริงว่างสำหรับสตริง) แต่คุณจะทำอย่างไรในกรณีของวันที่วันที่และเวลา (SQL Server 2008) คุณต้องใช้วันที่ในประวัติศาสตร์หรือจุดต่ำสุด ความคิดใด ๆ เกี่ยวกับเรื่องนี้?

8
SQL Server อ่านฟังก์ชัน COALESCE ทั้งหมดแม้ว่าอาร์กิวเมนต์แรกไม่ใช่ NULL หรือไม่
ฉันใช้COALESCEฟังก์ชันT-SQL โดยที่อาร์กิวเมนต์แรกจะไม่เป็นโมฆะในเวลาประมาณ 95% ของเวลาที่รัน หากอาร์กิวเมนต์แรกคืออาร์กิวเมนต์NULLที่สองนั้นเป็นกระบวนการที่ค่อนข้างยาว: SELECT COALESCE(c.FirstName ,(SELECT TOP 1 b.FirstName FROM TableA a JOIN TableB b ON .....) ) ตัวอย่างเช่นc.FirstName = 'John'ถ้า SQL Server จะยังเรียกใช้แบบสอบถามย่อยหรือไม่ ฉันรู้ว่าด้วยIIF()ฟังก์ชั่นVB.NET ถ้าอาร์กิวเมนต์ที่สองคือ True รหัสยังคงอ่านอาร์กิวเมนต์ที่สาม (แม้ว่ามันจะไม่ถูกใช้)

3
PostgreSQL ข้อ จำกัด หลายคอลัมน์ที่ไม่ซ้ำกันและค่าเป็นศูนย์
ฉันมีตารางดังนี้: create table my_table ( id int8 not null, id_A int8 not null, id_B int8 not null, id_C int8 null, constraint pk_my_table primary key (id), constraint u_constrainte unique (id_A, id_B, id_C) ); และฉันต้องการ(id_A, id_B, id_C)ชัดเจนในทุกสถานการณ์ ดังนั้นส่วนแทรกสองรายการต่อไปนี้ต้องส่งผลให้เกิดข้อผิดพลาด: INSERT INTO my_table VALUES (1, 1, 2, NULL); INSERT INTO my_table VALUES (2, 1, …

9
เมื่อใดที่จะใช้ NULL และเมื่อใช้สตริงว่าง?
ฉันสนใจ MySQL และ PostgreSQL เป็นส่วนใหญ่ แต่คุณสามารถตอบคำถามต่อไปนี้ได้โดยทั่วไป: มีสถานการณ์ตรรกะที่จะเป็นประโยชน์ในการแยกสตริงว่างจาก NULL หรือไม่ สิ่งที่จะเป็นผลกระทบที่เก็บทางกายภาพสำหรับการจัดเก็บสตริงว่างเปล่าเป็น ... โมฆะ? สตริงว่างเปล่า อีกสาขาหนึ่ง? มีวิธีอื่นอีกไหม?

4
ความแตกต่างระหว่างจำนวนที่เลือก (*) และจำนวนที่เลือก (any_non_null_column) คืออะไร
ฉันดูเหมือนจะจำไว้ว่า (ใน Oracle) มีความแตกต่างระหว่างการเปล่งเสียงและselect count(*) from any_tableselect count(any_non_null_column) from any_table อะไรคือความแตกต่างระหว่างสองข้อความนี้ถ้ามี?
58 oracle  aggregate  count  null 

5
เหตุใดการเปลี่ยนแปลงคอลัมน์ไม่เป็นศูนย์ทำให้เกิดการเติบโตของไฟล์บันทึกขนาดใหญ่
ฉันมีตารางที่มีแถว 64 ม. ที่ใช้ดิสก์ 4.3 GB สำหรับข้อมูล แต่ละแถวมีประมาณ 30 ไบต์ของคอลัมน์จำนวนเต็มบวกNVARCHAR(255)คอลัมน์ตัวแปรสำหรับข้อความ ฉันเพิ่ม AA คอลัมน์ nullable Datetimeoffset(0)กับข้อมูลประเภท จากนั้นฉันก็อัพเดทคอลัมน์นี้สำหรับทุกแถวและตรวจสอบให้แน่ใจว่าเม็ดมีดใหม่ทั้งหมดวางค่าในคอลัมน์นี้ เมื่อไม่มีรายการ NULL ฉันก็วิ่งคำสั่งนี้เพื่อให้ฟิลด์ใหม่ของฉันได้รับคำสั่ง: ALTER TABLE tblCheckResult ALTER COLUMN [dtoDateTime] [datetimeoffset](0) NOT NULL ผลที่ได้คือการเติบโตอย่างมากในขนาดของบันทึกการทำธุรกรรม - จาก 6GB เป็นมากกว่า 36GB จนกว่าจะหมดพื้นที่! ไม่มีใครมีความคิดอะไรในโลก SQL Server 2008 R2 ที่กำลังทำอยู่สำหรับคำสั่งง่ายๆนี้เพื่อให้เกิดการเติบโตอย่างมาก

7
หากชื่อของบุคคลนั้นเป็นโมฆะมันจะทำลายฐานข้อมูลได้อย่างไร?
ผมอ่านนี้บทความเกี่ยวกับบีบีซี มันบอกเล่าเรื่องราวของบุคคลที่ชื่อ Jenifer Null และวิธีที่เธอเผชิญกับปัญหาแบบวันต่อวันในขณะที่ใช้ฐานข้อมูลออนไลน์เช่นการจองตั๋วเครื่องบินธนาคารทางอินเทอร์เน็ตเป็นต้น ฉันไม่ชำนาญในฐานข้อมูลและฉันไม่ได้ใช้บ่อยนัก เมื่อฉันสร้างเว็บไซต์เพื่อการเรียนรู้การตรวจสอบความถูกต้องของฟอร์มเซิร์ฟเวอร์ใช้นิพจน์ทั่วไป จากสิ่งที่ฉันจำได้มันจะยอมรับชื่อ "Null" อย่างมีความสุข ฉันยังไม่ได้ลองเลย มีใครช่วยอธิบายด้านเทคนิคเมื่อสถานการณ์นี้จะเกิดขึ้น? การตรวจสอบความถูกต้องของฟอร์มกำลังทำstring == NULLสิ่งใดสิ่งหนึ่งหรือไม่ NULL is same as "NULL"ดังนั้นแม้ผมไม่คิดว่า

2
เป็นโมฆะหรือไม่เป็นค่าเริ่มต้น?
ใน MySQL จะดีกว่าหรือไม่ที่จะอนุญาตให้มีค่า Null เสมอเว้นแต่คุณจะรู้ว่าจำเป็นต้องใช้เขตข้อมูลหรือใช้เป็นประจำNot Nullเว้นแต่ว่าคุณรู้ว่าเขตข้อมูลจะมีค่า Null หรือไม่ หรือไม่สำคัญ ฉันรู้ในบาง DBMS ที่พวกเขาบอกว่าใช้Not Nullให้มากที่สุดเพราะการอนุญาตให้มีค่า Null นั้นต้องใช้บิตเพิ่มเติม (หรือไบต์?) ต่อเรคคอร์ดเพื่อเก็บสถานะ Null
41 mysql  null 

5
เหตุใดข้อ จำกัด UNIQUE จึงอนุญาตให้ NULL เพียงหนึ่งอันเท่านั้น
ในทางเทคนิค NULL = NULL เป็นเท็จโดยตรรกะนั้น NULL จะเท่ากับ NULL ใด ๆ และ NULL ทั้งหมดนั้นแตกต่างกัน นี่ไม่ควรบอกเป็นนัยเลยว่า NULL ทั้งหมดนั้นไม่เหมือนใครและดัชนีที่ไม่ซ้ำกันควรอนุญาตให้มี NULL จำนวนเท่าใด?

3
เหตุใด ANSI SQL จึงกำหนด SUM (ไม่มีแถว) เป็น NULL
กำหนด ANSI SQL มาตรฐาน (บทที่ 6.5 เปฟังก์ชั่นชุด) พฤติกรรมต่อไปนี้สำหรับฟังก์ชันการรวมในชุดผลลัพธ์ที่ว่างเปล่า COUNT(...) = 0 AVG(...) = NULL MIN(...) = NULL MAX(...) = NULL SUM(...) = NULL การส่งคืนค่า NULL สำหรับ AVG, MIN และ MAX เหมาะสมอย่างยิ่งเนื่องจากค่าเฉลี่ยค่าต่ำสุดและค่าสูงสุดของชุดว่างเปล่านั้นไม่ได้ถูกกำหนด อย่างไรก็ตามอันสุดท้าย, ทำให้ฉันรำคาญใจ: ในทางคณิตศาสตร์, SUM ของเซตว่างนั้นถูกนิยามไว้อย่างดี: 0. การใช้ 0 องค์ประกอบที่เป็นกลางของการเติมเนื่องจากเคสฐานทำให้ทุกอย่างสอดคล้องกัน: SUM({}) = 0 = 0 SUM({5}) = 5 = 0 …

1
ทำไมไม่เข้ากับชุดที่มีค่า NULL จะคืนค่าเป็น FALSE / NULL เสมอ?
ฉันมีแบบสอบถาม (สำหรับ Postgres และ Informix) ที่มีส่วนNOT INคำสั่งย่อยที่มีแบบสอบถามย่อยในบางกรณีที่ส่งคืนNULLค่าทำให้ส่วนคำสั่งนั้น (และแบบสอบถามทั้งหมด) ไม่สามารถส่งคืนสิ่งใดได้ วิธีที่ดีที่สุดที่จะเข้าใจสิ่งนี้คืออะไร? ฉันคิดว่าNULLเป็นสิ่งที่ไม่มีค่าและดังนั้นจึงไม่ได้คาดหวังแบบสอบถามที่จะล้มเหลว NULLแต่เห็นได้ชัดว่าไม่ใช่วิธีที่ถูกต้องที่จะคิดว่า


1
(x is not NULL) vs (ไม่ใช่ x is NULL) ใน PostgreSQL
ทำไมx IS NOT NULLไม่เท่ากับNOT x IS NULL? รหัสนี้: CREATE TABLE bug_test ( id int, name text ); INSERT INTO bug_test VALUES (1, NULL); DO $$ DECLARE v_bug_test bug_test; BEGIN RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NULL); RAISE NOTICE '%: %', v_bug_test, (v_bug_test IS NOT NULL); RAISE NOTICE '%: %', …
16 postgresql  null 

5
ทดสอบว่าคอลัมน์ใด ๆ เป็น NULL
ฉันพยายามที่จะคิดออกแบบสอบถามง่าย ๆ ที่ฉันสามารถทำได้เพื่อทดสอบว่าตารางขนาดใหญ่มีรายการของรายการที่มีค่าว่างอย่างน้อยหนึ่ง (NULL / เปล่า) ในคอลัมน์ใด ๆ ฉันต้องการบางสิ่งบางอย่าง SELECT * FROM table AS t WHERE ANY(t.* IS NULL) ฉันไม่ต้องการที่จะทำ SELECT * FROM table AS t WHERE t.c1 = NULL OR t.c2 = NULL OR t.c3 = NULL นี่จะเป็นข้อความค้นหาขนาดใหญ่

3
การเปรียบเทียบคอลัมน์ที่มี NULLS - มีวิธีที่สวยงามกว่านี้ไหม
ฉันรู้ว่าคุณไม่สามารถเปรียบเทียบค่ากับ NULL และคาดหวังผลลัพธ์โดยไม่ต้องเพิ่มบางอย่างในรหัสต่อไปนี้ ... SELECT * FROM A INNER JOIN B ON A.ID = B.ID WHERE A.STRING <> B.STRING OR (A.STRING IS NULL AND B.STRING IS NOT NULL) OR (A.STRING IS NOT NULL AND B.STRING IS NULL) OR A.DT <> B.DT OR (A.DT IS NULL AND B.DT IS NOT NULL) …
16 sql-server  null 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.