2010-06-28 11 views
9

He visto un par de conversaciones acerca de lo que todos hacían ahora con respecto a los valores de las claves firmadas y no firmadas. Parece que unsigned es óptimo ya que permite el doble de filas por el mismo costo. ¿Hay algún beneficio con las claves firmadas?Consenso? MySQL, Signed VS Unsigned Primary/Foreign Keys

¿Hay algún consenso estándar? Parece que firmó es la respuesta ya que "siempre ha sido así"

Respuesta

8

Prefiero configurar mis columnas como unsigned si no pueden ser negativas. Además del factor de rango que mencionaste, también lo hace más claro al leer la definición de la tabla.

-2

Un int. Firmado de 32 bits puede representar más de 2 mil millones de números, así que sospecho que el problema es discutible para la mayoría de las personas. Dicho esto, a menudo uso números negativos cuando quiero indicar que un registro está deliberadamente huérfano.

+2

GAHH! Lo siento, trabajo con una aplicación en la que alguien (que ya no está en la empresa) pensó que sería una buena idea. Literalmente, al menos una vez a la semana, encontramos algún tipo de problema (ya sea un desafío con un nuevo código o un error en el código existente) causado por esta loca decisión de diseño. ** No debe dar significado a las claves principales más allá del valor de la clave en sí, y nunca debe cambiar los valores de las claves primarias **. Si desea indicar una eliminación suave, tenga una columna de estado o una columna suavizada. Debido a que se trataba de una pieza fundamental del software, recién ahora lo estamos solucionando, como parte de una importante reescritura. – gregmac

+0

@gregmac s'ok, sabía que sería controvertido. Irónicamente, una mejor palabra de que 'huérfano' hubiera sido 'existencial'. Fue una elección irónica de términos desde que se me ocurrió el plan para representar a personas que solo sabía que debían existir. Mi aplicación permite que un usuario diga que Bob y Charlie son hermanos, pero que los almacenó internamente tiene registros cuyas columnas de padres referenciaron registros con claves negativas. Si alguien agregara a Jane como la mamá de Bob, podría actualizar a Charlie también. Generalmente utilizo el patrón cuando quiero decir que existe algo que otras cosas deben estar cerca. –

+2

Además, estoy muy familiarizado con la doctrina de que las claves primarias no deberían tener significado. Una mejor máxima es que el significado debe ser encapsulado. PK no debe significar nada para la capa de aplicación, pero significan cosas para la base de datos (sistema de gestión). En el esquema que describí anteriormente, simplemente estoy usando los PK como metadatos. Por cierto, he discutido esto aquí antes: http://stackoverflow.com/questions/2023988/modeling-existential-facts-in-a-relational-database –