SQL Server setara dengan tipe data enum MySQL?

Jawaban:

155

Tidak. Ada padanan yang tidak jelas:

mycol VARCHAR(10) NOT NULL CHECK (mycol IN('Useful', 'Useless', 'Unknown'))
kekacauan
sumber
10
Mengapa tidak menggunakan tabel yang mendefinisikan nilai yang valid, dan kemudian menggunakan batasan kunci asing sebagai gantinya?
Elaskanator
@ Elaskanator Saya akan mengatakan ini paling tepat menjawab OP langsung, sedangkan solusi terbaik untuk itu mungkin adalah penggunaan tabel eksternal FK +.
userfuser
Terima kasih @Elaskanator untuk mengingatkan saya tentang yang jelas ... menormalkan data dan menghentikan enum yang sudah ada.
Andrew
88

Solusi terbaik yang saya temukan dalam hal ini adalah membuat tabel pencarian dengan nilai yang mungkin sebagai kunci utama, dan membuat kunci asing ke tabel pencarian.

pengguna1431422
sumber
13
Solusi yang lebih baik dari perspektif rawatan daripada kendala pemeriksaan yang ditunjukkan di atas.
HLGEM
21
Ini adalah solusi yang lebih baik daripada Enums - di MySQL juga.
ypercubeᵀᴹ
2
@ ypercube Mengapa lebih baik untuk MySQL juga?
BenR
4
@BenRecord Ada beberapa masalah dengan enum MySQL: 8 Alasan Mengapa Tipe Data ENUM MySQL Adalah Jahat . Saya tidak setuju 100% bahwa itu jahat tetapi Anda harus ekstra hati-hati saat menggunakannya.
ypercubeᵀᴹ
1
@BenR juga jika saya ingat dengan benar, dalam mode non-ketat dengan MySQL, enum yang tidak valid dapat dimasukkan sebagai NULL. Apa pun kondisinya, tim saya sebelumnya memiliki masalah dengan enum MySQL yang tidak dimasukkan dan tidak gagal ketika nilai tidak ditentukan dalam daftar nilai. Batasan kunci asing pada tabel pencarian akan menyebabkan kegagalan. Saya setuju tabel pencarian lebih baik untuk MySQL.
Jim Schubert
2
CREATE FUNCTION ActionState_Preassigned()
RETURNS tinyint
AS
BEGIN
    RETURN 0
END

GO

CREATE FUNCTION ActionState_Unassigned()
RETURNS tinyint
AS
BEGIN
    RETURN 1
END

-- etc...

Di mana kinerja penting, masih menggunakan nilai keras.

Dimitrios Staikos
sumber
1

Menemukan pendekatan yang menarik ini ketika saya ingin mengimplementasikan enums di SQL Server.

Pendekatan yang disebutkan di bawah dalam tautan ini cukup menarik, mengingat semua kebutuhan enum basis data Anda dapat dipenuhi dengan 2 tabel pusat.

http://blog.sqlauthority.com/2010/03/22/sql-server-enumerations-in-relational-database-best-practice/

user_v
sumber
8
Ini adalah variasi dari pola anti-dikenal sebagai "satu tabel (pencarian)". Pendekatan yang tepat adalah memiliki tabel terpisah untuk setiap jenis enum dan menggunakan kunci asing (jika Anda perlu mencari sama sekali, yang mungkin tidak berlaku untuk enum "murni").
Branko Dimitrijevic
2
Komentar pada halaman tertaut memberikan cadangan yang baik untuk menggunakan tabel individual untuk setiap "enum", daripada apa yang ditentukan jawaban ini
skia.heliou
4
Cukup lucu bagaimana kebanyakan orang akan menolak keras desain ini, namun penulis menyebutkan artikelnya "Praktik Terbaik".
underscore_d