Aujourd'hui j'ai appris : les index uniques sur plusieurs colonnes dont une ou plusieurs nullables, ça se fait mais vous voudrez sûrement nulls_distinct=False
https://tut-tuuut.github.io/til/2024-12-06-null-distinct-ou-pas #postgresql #til #django
Désolée pour le post de niche un vendredi soir si vous me suivez pour les bêtises, mais je vous assure que si vous concevez des schémas de base de données ça peut vous servir. À bientôt pour des infos random sur autre chose qui n'a rien à voir.
@tut_tuuut Et pendant ce temps là, les utilisateurs MySQL rêvent d'avoir cette option... #JeVeuxUneVraiBDD
@schnouki Justement je me demandais comment se comportait MySQL de ce point de vue. Je ne me souvenais pas d'avoir rencontré un problème de la sorte pendant mes 11 ans de MySQL, mais peut-être juste que je n'ai pas cherché les problèmes assez loin.
@tut_tuuut MySQL considère toujours les `NULL` comme des valeurs distinctes. Donc si on a une clef composite dont une des colonnes est nullable, bah ça peut vite casser.
La solution suggérée par mon génial collègue @artyom : utiliser quelque chose comme ça :
```sql
ALTER TABLE my_table
ADD UNIQUE INDEX ix_blabla (`col1`,`col2`, (ifnull(`col3`,0x00)));
```
@schnouki @tut_tuuut @artyom pas top MySQL. Aucun langage de programmation sérieux ne ferait une différence autre que le type entre deux None (ou null). Il faudrait corriger ça à la source !
Sinon, vous avez composé du markdown dans le toot, c’est parce qu’il a un client Mastodon qui l’interprète ?
@tut_tuuut @schnouki @artyom oui et je comprends pourquoi. Pour le dire dans un langage plus moderne, on ne veut pas en général que [Some(1), Some(2), None, None].containsDistinctValues réponde false. Par contre on aimerait que [Some(1), Some(2), None, None].distincts soit égal à [Some(1), Some(2), None].
@pierreb @tut_tuuut J'utilise Phanpy.social, qui effectivement me l'affiche à peu près correctement. Mais sinon le Markdown c'est surtout par habitude, et parce que j'ai copié/collé ça de mes notes (Obsidian) qui sont en Markdown aussi :)
@tut_tuuut très bon article, merci, je me permets toutefois une précision : null désigne l'absence de valeur, on ne peut donc pas parler de valeur null ; c'est ce qui fait que null n'est pas égal à null. Par, l'opérateur IS DISTINCT FROM est très utile lors d'utilisation de colonne nullable.