2010-11-30 19 views
7

Tengo una columna en una de mis tablas. Es opcional, por lo que puede dejarse en blanco. Sin embargo, si se proporciona un valor para esa columna, debe ser único. Dos preguntas:Diseño de la base de datos: opcional, pero debe ser único si se proporciona un valor

  1. ¿Cómo implementar esto en mi diseño de base de datos (estoy usando MySQL Workbench, por cierto)
  2. ¿Existe un problema potencial con mi modelo?
+1

Respuesta a (2). No, esto es bastante normal. –

Respuesta

4

Simplemente use un índice UNIQUE en la columna. Ver:

http://dev.mysql.com/doc/refman/5.1/en/create-index.html

un índice único crea una restricción de tal manera que todos los valores del índice deben ser distintos. Se produce un error si intenta agregar una nueva fila con un valor de clave que coincida con una fila existente. Para todos los motores , un índice UNIQUE permite valores NULL múltiples para columnas que pueden contener NULL. Si especifica un valor de prefijo para una columna en un índice UNIQUE , los valores de columna deben ser únicos dentro del prefijo.

2

Puede ser nulo (y no en blanco) y único. Por defecto, el valor puede ser nulo. No hay problema para mi

1

Puede crear un índice UNIQUE en una tabla. En MySQL workbench que es la casilla de verificación UQ al crear/editar la tabla.

0

Paso 1, ALTER la tabla y MODIFY el campo así que NULL s están permitidos.

ALTER TABLE my_table MODIFY my_field VARCHAR(100) NULL DEFAULT NULL; 

Paso 2, agregue un UNIQUE índice en el campo.

ALTER TABLE my_table ADD UNIQUE INDEX U_my_field (my_field); 

Está bien usar - mi única duda con poner un índice UNIQUE en un campo anulable lo que es ligeramente contrario a la intuición, a primera vista.

0

1) Mueva la columna a una nueva tabla, hágalo único y no admite nulos. Ahora puede tener una fila en esta nueva tabla solo cuando tenga un valor para ella.

2) Sí. Las claves y las dependencias de las claves son la base de la integridad de los datos en un diseño de base de datos relacional. Si se supone que un atributo es único, debe implementarse como una clave. Una "clave" que se puede anular no es en absoluto una clave y, de todos modos, nunca es necesaria porque siempre se puede mover a una nueva tabla y no se puede anular sin pérdida de información.

Cuestiones relacionadas