Estoy usando Guid como mi clave principal para todas mis otras tablas, pero tengo un requisito necesario para tener un número incremental. Traté de crear un campo en la tabla con el incremento automático MySql pero se quejó de que debía ser la clave principal.

Mi aplicación utiliza MySql 5, nhibernate como el ORM.

Posibles soluciones que he pensado son:

  • cambiar la clave principal para el campo de incremento automático, pero todavía tiene el Id como un GUID para el resto de mi aplicación sea coherente.

  • crear una clave compuesta con el GUID y el campo de incremento automático.

Mis pensamientos en el momento en que se están inclinando hacia la clave compuesta idea.

EDIT: El ID de Fila (Clave Principal) es el GUID en la actualidad. Me gustaría añadir un Campo INT que se Auto Incrementa de modo que sea legible para los humanos. Simplemente no me quiero alejar de corriente estándar en la aplicación de haber GUID primaria de teclas.

  • ¿El incremento de número se incrementa en la base de datos o puede ser calculado a partir de la code?
  • Ahora hay razón para no ser calculada a partir de código. Es una aplicación web que yo no estaba pensando en que sería posible a partir de un código y aún así garantizar la unicidad. Feliz de estar equivocado, aunque

6 Comentarios

  1. 9

    Un valor GUID está diseñado para ser único a través de mesas e incluso bases de datos de forma, hacer que la columna auto_increment índice principal y hacer un índice ÚNICO para el GUID

    • Creo que esta es probablemente la mejor manera de ir a por mi situación. gracias.
    • Sí … eso es todo.
  2. 5

    Me inclino por otro camino.

    ¿Por qué? Debido a la creación de una clave compuesta da la impresión de que el tipo de al lado que viene que es aceptable tener el mismo GUID en la mesa dos veces pero con diferentes números de secuencia.

  3. 0

    Un par de pensamientos:

    • Si el GUID es auntoincremental y único, ¿por qué no deja de ser la Clave Principal?

    • Por otro lado, usted nunca debe tomar semántico de decisiones basadas en la programático problemas: tienes un problema con MySQL, no con el diseño de tu DB.

    Así, un par de soluciones aquí:

    • Crear un trigger que establece el GUID para el valor correcto una vez que se inserta. Esa es una de MySQL solución a una base de datos MySQL problema, sin alterar la semántica para su esquema.

    • Antes de insertar, iniciar una transacción (asegúrese de confirmación automática se establece en false), encontrar las últimas GUID, incremento y la inserción con el nuevo valor. En otras palabras, la auto-increment no de forma automática 😛

    • Guid no autoincremental. son como los Uuid, un semi-aleatoria número muy largo por lo que es muy improbable que se chocan en cualquier lugar.
    • Sí, sé que los Guid se mucho de números, pero él pidió que se autoincremental, así que eso es lo que me contestó 🙂
  4. 0

    GUID‘s no están destinados a estar disponible, por eso AUTO_INCREMENT para ellos no tiene sentido.

    Usted puede, sin embargo, el uso de un AUTO_INCREMENT para una segunda columna de una clave principal compuesta en MyISAM tablas. Usted puede crear una clave compuesta de más de (GUID, INT) columna y hacer la segunda columna se AUTO_INCREMENT.

    Para generar un nuevo GUID, simplemente llame a UUID() en un INSERT declaración o en un desencadenador.

  5. 0

    No, solo la clave primaria puede tener auto_increment como su valor.

    • Mal. Cualquier tecla en MySQL puede tener auto_increment. dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html
    • No puedo encontrar la información que usted menciona en el enlace proporcionado. Sólo con la cosa es ‘Para tablas MyISAM, puede especificar AUTO_INCREMENT en una segunda columna en una columna varias índice.’
  6. 0

    Si, por alguna razón, usted no puede cambiar la columna de identidad para ser una clave principal, lo que acerca generar manualmente el incremento automático a través de algún tipo de SECUENCIA de la tabla de más de un disparador para la consulta de la SECUENCIA de la tabla y guardar el siguiente valor de uso. A continuación, asignar el valor a la tabla de destino en el gatillo. El mismo efecto. La única pregunta que me gustaría tener es si el incremento automático de valor se va a volver a través de NHibernate sin volver a seleccionar de la tabla.

Dejar respuesta

Please enter your comment!
Please enter your name here