Pertanyaan Tanpa Penjelasan:
Adakah yang memiliki batasan 2 nilai null yang selalu mengharuskan 1 memiliki nilai? Misalnya dua kolom tanggal keduanya nol tetapi memiliki setidaknya 1 yang mengharuskan memiliki nilai
Deskripsi Masalah:
Katakanlah saya punya meja bernama Beban
dan memiliki 2 tanggal:
prevision_expense_expiration_date DATE NULLABLE cost_payment_date DATE NULLABLE
logika 2 kolom tersebut adalah sebagai berikut:
Saya melakukan pembelian sesuatu dan saya tahu saya harus membayarnya, tanggal tertentu, seperti tagihan telepon. Saya akan memasukkan ini sebagai pengeluaran dengan cost_payment_date. Tanggal ini adalah tanggal yang seharusnya saya bayar tetapi bukan tanggal pembayaran yang sebenarnya, seperti tanggal kadaluwarsa faktur.
Dalam situasi lain saya menjual kartu hadiah dari beberapa penyedia untuk layanan itu. Saya mungkin memiliki biaya untuk membeli ke penyedia saya layanan yang ditransfer ke klien saya hanya jika klien menebus kartu. Karenanya kartu hadiah memiliki tanggal kedaluwarsa, saya ingin melakukan previsi untuk 'pengeluaran' itu tanpa memasukkan sebagai biaya untuk waktu kartu hadiah valid, jika kartu hadiah kedaluwarsa, 'biaya' itu tidak boleh dimasukkan ke dalam akun sistem.
Saya tahu saya dapat memiliki 2 tabel yang sama yang disebut prevision_expense dan confirm_expense tetapi tidak terdengar benar sehingga saya ada di tabel yang sama, 2 tanggal, nullable, tetapi saya ingin membatasi atau sesuatu sehingga selalu diperlukan.
Ada strategi lain yang mungkin:
payment_date DATE NOT NULL is_prevision_date BOOL NOT NULL
Jadi, dalam hal ini, jika tanggal adalah nilai bool prevision akan menjadi 1, jika tidak akan menjadi 0. Tidak ada nilai null, semuanya baik kecuali bahwa saya ingin opsi untuk menyimpan KEDUA nilai ketika pertama kali saya memiliki tanggal previsi dan MAKA (katakanlah dua hari kemudian) memiliki tanggal yang dikonfirmasi untuk pengeluaran itu, dalam hal ini dengan strategi 2 saya tidak akan memiliki opsi itu.
Apakah saya melakukan semua yang salah dalam desain database? : D
sumber
CHECK
kendala juga. Tidak perlu untuk kolom yang bertahan.CREATE TABLE Test_Constraint2 ( A DateTime Null, B DateTime Null, CONSTRAINT A_or_B_Not_Null CHECK (CASE WHEN A IS Null AND B IS Null THEN 0 ELSE 1 END = 1) )
Saya menemukan sebuah artikel yang terlihat seperti hal yang sama di sini
sumber