Вы находитесь на странице: 1из 40

CREAR UN ESQUEMA EER

DESDE EL GESTOR DE BASE


DE DATOS MYSQL
WORKBENCH
En Abr 20, 2011 | 25 comentarios Categoría: Gestión de Proyecto

Usando MySQL Workbench.

MySQL Workbench es una herramienta para desarrollar y administrar bases de datos.


Tiene 3 grandes areas de funcionalidad:

1. SQL Development: Reemplaza a MySQL query browser. Desde aquí termine al


usuario conectar a una base de datos existente, permite realizar queries, y una
administración básica de la base de datos.
2. Data Modeling: Es un completo gestor visual para diseñar y definir la
arquitectura de la base de datos.
3. Database Administration:Reemplaza a MySQL Administrator, es un interface
gráfico para administración de la base de datos y del servidor en general, se
puede editar archivos de configuración de Mysql, se puede crear nuevos
usuarios, y si estamos trabajando con una base de datos local, se puede reiniciar
el servicio de mysql.

Planificando la base de datos


Como siempre lo mejor es hacer un boceto rápido en papel.
Como veis en la siguiente imagen no podría entregar a un equipo de desarrolladores la
arquitectura de la base de datos con el siguiente gráfico, aunque en el mundo real a
veces las especificaciones que te dan se parecen a estas, un infierno.
El esquema que se puede elaborar desde Mysql WorkBench es un esquema EER.
EER es un modelo de alto nivel o modelo conceptual de datos que mejora la entidad-
relación (ER), que se utiliza en el diseño de bases de datos. Se utiliza para reflejar con
toda la precisión que se pueda las características y limitaciones que se encuentran en
una base de datos. EER viene del ingles enhanced entity-relationship o modelo entidad-
relación mejorado.

El modelo EER incluye todos los conceptos introducidos por el modelo ER. Además,
incluye los conceptos de una subclase y superclase, junto con los conceptos de
especialización y generalización. Además, se introduce el concepto de un tipo de unión
o de una categoría, que se utiliza para representar una colección de objetos que es la
unión de objetos de diferentes tipos de entidades.

Relaciones entre tablas

Si queremos crear tablas físicas en MySQL las relaciones tienen que estar mapeadas de
alguna manera.
Para mapear estas relaciones entre tablas existen diferentes reglas:

 1:1. El primary key para una de las tablas es incluido como foreing key en otra
tabla.
 1:n. uno-a-muchos. Consiste en establecer una relación entre un atributo
identificativo, ya sea un primary key u otro campo que permita diferenciarlo de
otra instancia de una tabla A, con n campos de la tabla B. Por ejemplo:
Una factura (entidad) se emite (relación) a una persona (entidad) y sólo una,
pero una persona puede tener varias facturas emitidas a su nombre. Todas las
facturas se emiten a nombre de alguien.
 n:m. Es cuando se crea una tabla mediante un join. La clave primaria es
compuesta por los primary keys de las dos tablas originales. Por ejemplo: Un
cliente (entidad) puede comprar (relación) varios artículos (entidad) y un artículo
puede ser comprado por varios clientes distintos.

Crear El schema y las tablas

Desde el menú principal de Mysql Workbench seleccionamos la opción de Create New


EER Model.

Creamos o importamos nuestra base de datos con las tablas. O las vamos creando desde
0, a partir de nuestro boceto inicial.
La creación de la arquitectura de la base de datos y las tablas no es algo que salga a la
primera, requiere ir profundizando en la aplicación, estimar que necesitarás a largo
plazo y contemplarlo en el modelo de datos a pesar de que no se programe inicialmente.

El menu principal que veremos será algo parecido a esto.


Una vez tengamos nuestras tablas creadas, o al menos la primera version o fase de las
tablas, pinchamos en el botón de EER Diagram para crear nuestro modelo EER.O bien
podemos seleccionar Model >Create Diagram from catalog object.

Esto nos cargará todas las tablas que hemos creado en el canvas de la aplicación y
podremos empezar a establecer las relaciones entre las tablas.
Como he explicado anteriormente usaremos los tipos de relaciones para ir creando el
modelo de relación entre nuestra tablas. Para ello usaremos las opciones de MySQL
Workbench para establecer las relaciones.

A medida que se vayan creando las relaciones irá quedando el modelo definido, como
aparece en la siguiente imagen.
(Nota: este modelo es una ejemplo que estoy utilizando, no es real)

Se puede cambiar el tipo de notación que representan las relaciones. A mi


personalmente me gusta mas el tipo de notación UML que el que esta usando
Workbench.
Para cambiarlo, dentro de la Diagrama EER > Model > Relationship Notation y se
pueden elegir entre 5 opciones.

Esto llevará varias horas, o como a mi varios días. Si se esta haciendo un modelo de
datos profesional para un entorno en producción puede llevar bastante tiempo en el
desarrollo de la arquitectura de la base de datos. Incluso a pesar de todo el tiempo
invertido siempre pueden surgir limitaciones y deficiencias.
Es muy importante intentar desarrollar el modelo pensando en todas la funcionalidades
que tendrá la aplicacion a corto y que pueda tener a largo plazo. Para por lo menos tener
un buen modelo de datos en el momento de salida y poder escalar bien la base de datos.

El diagrama se puede exportar a PNG, SVG, PDF o un archivo PostScript.

Uno de mis proyectos actuales presenta el siguiente aspecto:


Conclusión: MySQL Workbench es una herramienta excepcional y sin duda algo que se
debería usar en todo momento a la hora de gestionar una base de datos, como mínimo la
parte de Data Modeling y Database Administration. En este tutorial no me acerco ni de
lejos a todo el potencial del programa pero al menos he comentado a modo de
introducción una de las partes que es el diagrama EER.

Tags de búsquedas:

diagrama eer,mysql workbench,como crear un diagrama entidad relacion en mysql


workbench,der base de datos producion,son muy editor de esquemas entidad
relacion?,como hacer relaciones en mysql workbench,generar automáticamente la
interfaz grafica desde una base mysql,ejemplos de base de datos en mysql,crear
esquemas sql grafico,como hacer la eer,eer diagram mysql workbench,como relacionar
tablas en mysql workbench,relaciones en mysql workbench,volcado de datos en mysql
desde query browser,como se crea una bd en mysql workbench

Trabajar con esquemas de


tablas
Sync Framework 2.0
Otras versiones

En este tema se explican varios métodos que puede seguir para trabajar con los
esquemas de tablas creados en bases de datos cliente y del mismo nivel.

Sincronización del cliente y el servidor


Durante la sesión de sincronización inicial para un cliente, Sync Framework crea
tablas en la base de datos cliente. Para obtener más información, veaInicializar
la base de datos cliente y trabajar con el esquema de tablas. Una vez creadas
esas tablas, se permiten algunos cambios de esquema.
Sync Framework no propaga automáticamente los cambios de esquema del
servidor al cliente. Para obtener información acerca de cómo controlar los
cambios de esquema en el servidor, vea Implementar y controlar las versiones
de aplicaciones. Los cambios de esquema siguientes se admiten en la base de
datos cliente:
 Quitar tablas. El comportamiento durante la próxima sincronización
dependerá del valor que se especifique para CreationOption. Si no desea
conservar la tabla en el cliente, quítela de SyncTableCollection. Cuando
se quita una tabla que tiene habilitado el seguimiento de cambios,
también se quita la tabla del sistema que realiza un seguimiento de las
operaciones de eliminación en esa tabla. Por consiguiente, no se cargará
en el servidor ninguna de las operaciones de eliminación realizadas
desde la última sincronización.
 Agregar columnas nuevas.
 Quitar columnas para las tablas implicadas en la sincronización de
instantáneas. Este cambio no se admite para otros tipos de
sincronización.
 Agregar, quitar y cambiar de nombre índices.
 Agregar, quitar y cambiar de nombre claves principales y otras
restricciones.
 Modificar valores predeterminados.
Los demás cambios no se admiten y pueden causar errores de sincronización.
En algunas aplicaciones, el esquema es diferente en el cliente y el servidor. En
los puntos siguientes se resume el comportamiento de una tabla y el conjunto
de datos de ADO.NET que Sync Framework utiliza para actualizar esa tabla en el
cliente:
 Si el conjunto de datos contiene Column1 y Column2; y la tabla
contiene Column1, Column2 y Column3: se aplican los valores
en Column1y Column2 y Column3 se establece según su valor
predeterminado o en NULL en caso de que la columna no tenga un valor
predeterminado.
 Si el conjunto de datos contiene Column1, Column2 y Column3, y la
tabla contiene Column1 y Column2: se aplican los valores
en Column1y Column2 y se omite Column3 .
 Si el conjunto de datos contiene Column1, Column2 y Column3, y la
tabla contiene Column1 y Column2, y Column4: se aplican los valores
en Column1 y Column2; Column3 se establece en su valor
predeterminado o en NULL en caso de que la columna no tenga un valor
predeterminado; y Column4 se omite.

Sincronización punto a punto


La sincronización punto a punto no proporciona inicialización automática de
bases de datos del mismo nivel ni crea una infraestructura de seguimiento de
cambios en cada elemento del mismo nivel. Para obtener información sobre la
inicialización de esquema y de datos, vea "Inicializar una base de datos del
servidor" en Configurar y ejecutar la sincronización de colaboración (no SQL
Server). No hay ninguna restricción sobre cambios de esquema en tablas base
de bases de datos del mismo nivel. Sin embargo, las aplicaciones deben
garantizar que los comandos que seleccionan y aplican cambios se actualicen si
se producen cambios de esquema. Por ejemplo, si agrega una columna a una
tabla, el comando para insertar cambios en esa tabla debe actualizarse para
incluir la nueva columna.
En situaciones de sincronización punto a punto, el esquema puede diferir entre
bases de datos del mismo nivel. Por ejemplo, un esquema de tabla en el primer
elemento del mismo nivel puede utilizar nombres de columna numéricos que
no son fáciles de leer. Puede utilizar los
objetosDbSyncColumnMappingCollection y DbSyncColumnMapping para
asignar las columnas a nombres más descriptivos para otros elementos del
mismo nivel.
v Modelo de Clases
Introducción

Un diagrama de clases sirve para visualizar las relaciones entre las clases que
involucran el sistema, las cuales pueden ser asociativas, de herencia, de uso y
de contenimiento.

Un diagrama de clases esta compuesto por los siguientes elementos:

 Clase: atributos, métodos y visibilidad.


 Relaciones: Herencia, Composición, Agregación, Asociación y Uso.

Elementos

 Clase

Es la unidad básica que encapsula toda la información de un Objeto (un


objeto es una instancia de una clase). A través de ella podemos modelar
el entorno en estudio (una Casa, un Auto, una Cuenta Corriente, etc.).

En UML, una clase es representada por un rectángulo que posee tres


divisiones:

En donde:

o Superior: Contiene el nombre de la Clase


o Intermedio: Contiene los atributos (o variables de instancia) que
caracterizan a la Clase (pueden ser private, protected o public).
o Inferior: Contiene los métodos u operaciones, los cuales son la
forma como interactúa el objeto con su entorno (dependiendo de
la visibilidad: private, protected o public).

Ejemplo:

Una Cuenta Corriente que posee como característica:

o Balance
Puede realizar las operaciones de:

o Depositar
o Girar
o y Balance

El diseño asociado es:

Atributos y Métodos:

o Atributos:

Los atributos o características de una Clase pueden ser de tres


tipos, los que definen el grado de comunicación y visibilidad de
ellos con el entorno, estos son:

 public (+, ): Indica que el atributo será visible tanto


dentro como fuera de la clase, es decir, es accsesible desde
todos lados.
 private (-, ): Indica que el atributo sólo será accesible
desde dentro de la clase (sólo sus métodos lo pueden
accesar).
 protected (#, ): Indica que el atributo no será
accesible desde fuera de la clase, pero si podrá ser
accesado por métodos de la clase además de las subclases
que se deriven (ver herencia).
o Métodos:

Los métodos u operaciones de una clase son la forma en como


ésta interactúa con su entorno, éstos pueden tener las
características:

 public (+, ): Indica que el método será visible tanto


dentro como fuera de la clase, es decir, es accsesible desde
todos lados.
 private (-, ): Indica que el método sólo será accesible
desde dentro de la clase (sólo otros métodos de la clase lo
pueden accesar).
 protected (#, ): Indica que el método no será
accesible desde fuera de la clase, pero si podrá ser
accesado por métodos de la clase además de métodos de
las subclases que se deriven (ver herencia).
 Relaciones entre Clases:

Ahora ya definido el concepto de Clase, es necesario explicar como se


pueden interrelacionar dos o más clases (cada uno con características y
objetivos diferentes).

Antes es necesario explicar el concepto de cardinalidad de relaciones:


En UML, la cardinalidad de las relaciones indica el grado y nivel de
dependencia, se anotan en cada extremo de la relación y éstas pueden
ser:

o uno o muchos: 1..* (1..n)


o 0 o muchos: 0..* (0..n)
o número fijo: m (m denota el número).
iv. Herencia (Especialización/Generalización):

Indica que una subclase hereda los métodos y atributos


especificados por una Super Clase, por ende la Subclase además
de poseer sus propios métodos y atributos, poseerá las
características y atributos visibles de la Super Clase (public y
protected), ejemplo:
En la figura se especifica que Auto y Camión heredan de
Vehículo, es decir, Auto posee las Características de Vehículo
(Precio, VelMax, etc) además posee algo particular que es
Descapotable, en cambio Camión también hereda las
características de Vehiculo (Precio, VelMax, etc) pero posee
como particularidad propia Acoplado, Tara y Carga.

Cabe destacar que fuera de este entorno, lo único "visible" es el


método Caracteristicas aplicable a instancias de Vehículo, Auto
y Camión, pues tiene definición publica, en cambio atributos
como Descapotable no son visibles por ser privados.

v. Agregación:

Para modelar objetos complejos, n bastan los tipos de datos


básicos que proveen los lenguajes: enteros, reales y secuencias
de caracteres. Cuando se requiere componer objetos que son
instancias de clases definidas por el desarrollador de la
aplicación, tenemos dos posibilidades:

 Por Valor: Es un tipo de relación estática, en donde el


tiempo de vida del objeto incluido esta condicionado por
el tiempo de vida del que lo incluye. Este tipo de relación
es comunmente llamada Composición (el Objeto base se
contruye a partir del objeto incluido, es decir, es
"parte/todo").
 Por Referencia: Es un tipo de relación dinámica, en
donde el tiempo de vida del objeto incluido es
independiente del que lo incluye. Este tipo de relación es
comunmente llamadaAgregación (el objeto base utiliza al
incluido para su funcionamiento).

Un Ejemplo es el siguiente:

En donde se destaca que:

 Un Almacen posee Clientes y Cuentas (los rombos van en


el objeto que posee las referencias).
 Cuando se destruye el Objeto Almacen también son
destruidos los objetos Cuenta asociados, en cambio no son
afectados los objetos Cliente asociados.
 La composición (por Valor) se destaca por un rombo
relleno.
 La agregación (por Referencia) se destaca por un rombo
transparente.

La flecha en este tipo de relación indica la navegabilidad del


objeto refereniado. Cuando no existe este tipo de particularidad
la flecha se elimina.

vi. Asociación:

La relación entre clases conocida como Asociación, permite


asociar objetos que colaboran entre si. Cabe destacar que no es
una relación fuerte, es decir, el tiempo de vida de un objeto no
depende del otro.

Ejemplo:
Un cliente puede tener asociadas muchas Ordenes de Compra, en
cambio una orden de compra solo puede tener asociado un
cliente.

vii. Dependencia o Instanciación (uso):

Representa un tipo de relación muy particular, en la que una


clase es instanciada (su instanciación es dependiente de otro
objeto/clase). Se denota por una flecha punteada.

El uso más particular de este tipo de relación es para denotar la


dependencia que tiene una clase de otra, como por ejemplo una
aplicación grafica que instancia una ventana (la creación del
Objeto Ventana esta condicionado a la instanciación proveniente
desde el objeto Aplicacion):

Cabe destacar que el objeto creado (en este caso la Ventana


gráfica) no se almacena dentro del objeto que lo crea (en este
caso la Aplicación).

 Casos Particulares:
o Clase Abstracta:

Una clase abstracta se denota con el nombre de la clase y de los


métodos con letra "itálica". Esto indica que la clase definida no
puede ser instanciada pues posee métodos abstractos (aún no han
sido definidos, es decir, sin implementación). La única forma de
utilizarla es definiendo subclases, que implementan los métodos
abstractos definidos.

o Clase parametrizada:
Una clase parametrizada se denota con un subcuadro en el
extremo superior de la clase, en donde se especifican los
parámetros que deben ser pasados a la clase para que esta pueda
ser instanciada. El ejemplo más típico es el caso de un
Diccionario en donde una llave o palabra tiene asociado un
significado, pero en este caso las llaves y elementos pueden ser
genéricos. La genericidad puede venir dada de un Template
(como en el caso de C++) o bien de alguna estructura predefinida
(especialización a través de clases).

En el ejemplo no se especificaron los atributos del Diccionario,


pues ellos dependerán exclusivamente de la implementación que
se le quiera dar.

Ejemplo:

Supongamos que tenemos tenemos un el caso del Diccionario implementado


mediante un árbol binario, en donde cada nodo posee:

 key: Variable por la cual se realiza la búsqueda, puede ser generica.


 item: Contenido a almacenar en el diccionario asociado a "key", cuyo
tipo también puede ser genérico.

Para este caso particular hemos definido un Diccionario para almacenar String
y Personas, las cuales pueden funcionar como llaves o como item, solo se
mostrarán las relaciones para la implementación del Diccionario:

Este artículo se tradujo de forma manual. Mueva el puntero sobre las frases del artículo para ver el texto original.M
Diagramas de clases de UML:
Instrucciones
Visual Studio 2015

Otras versiones

En Visual Studio, puede usar un diagrama de clases UML para describir los tipos
de datos y sus relaciones con independencia de su implementación.El diagrama
se utiliza para que la atención se centre en los aspectos lógicos de las clases en
lugar de en su implementación.
Para crear un diagrama de clases UML, en el menú Arquitectura, elija Nuevo
diagrama de UML o diagrama de capas.
Para ver las versiones de Visual Studio compatibles con esta característica,
vea Compatibilidad de versiones con las herramientas de arquitectura y
modelado.

Nota

En este tema se analizan los diagramas de clases de UML.Existe otro tipo de diagrama
de clases, que se crea y utiliza para visualizar el código del programa.Vea el tema
sobre cómo diseñar y ver clases y tipos.

En este tema
Usar diagramas de clases de UML
Pasos básicos para dibujar diagramas de clases
Usar clases, interfaces y enumeraciones
Atributos y operaciones
Dibujar y utilizar asociaciones
Herencia
Tipos de plantilla
Definir los espacios de nombres con paquetes
Generar código a partir de diagramas de clases de UML
Usar diagramas de clases de UML
Los diagramas de clases de UML pueden utilizarse para una gran variedad de
propósitos:
 Para proporcionar una descripción de los tipos que se utilizan en un
sistema y se pasan entre sus componentes que no tenga nada que ver
con su implementación.
Por ejemplo, en el código .NET, el tipo Pedido de menú podría
implementarse en la capa del negocio; en XML, en las interfaces entre los
componentes; en SQL, en la base de datos, y en HTML, en la interfaz de
usuario.Aunque estas implementaciones tengan un nivel de detalle
diferente, la relación entre el tipo Pedido de menú y otros tipos, como
Menú y Pago, es siempre la misma.El diagrama de clases de UML permite
analizar estas relaciones con independencia de las implementaciones.
 Para clarificar el glosario de términos que se utiliza en la comunicación
entre la aplicación y los usuarios y en las descripciones de las
necesidades de los usuarios.Consulte Requisitos del usuario de modelos.
Por ejemplo, piense en los casos de usuario, los casos de uso y otras
descripciones de los requisitos de la aplicación de un restaurante.En este
tipo de descripción, encontrará términos como Menú, Pedido, Comida,
Precio, Pago, etc.Puede dibujar un diagrama de clases de UML en el que
se definan las relaciones entre estos términos.De este modo, se reducirá
el riesgo de inconsistencias en las descripciones de los requisitos, así
como en la interfaz de usuario y los documentos de ayuda.
Relación con otros diagramas
Un diagrama de clases de UML normalmente se crea junto con otros diagramas
de modelado para proporcionar descripciones de los tipos que utilizan.En cada
caso, la representación física de los tipos no está implícita en ninguno de los
diagramas.

Si dibujó: Utilice un diagrama de clases de UML para describir:

Diagrama de Tipos de datos que pasan por un nodo de objeto.


actividades Tipos de terminales de entrada (Input Pin) y de salida (Output
Pin) de nodos de parámetros de actividad.
Consulte Diagramas de actividades UML: Instrucciones.

Diagrama de Tipos de parámetros y valores devueltos de mensajes.


secuencia Tipos de líneas de vida.La clase de una línea de vida debe incluir
las operaciones de todos los mensajes que puede recibir.
Consulte Diagramas de secuencia de UML: Instrucciones.
Diagrama de Interfaces de componentes, con un listado de sus operaciones.
componentes Consulte Diagramas de componentes de UML: Instrucciones.

Diagrama de casos Tipos mencionados en las descripciones de los objetivos y los


de uso pasos de un caso de uso.
Consulte Diagramas de casos de uso de UML: Instrucciones.

Pasos básicos para dibujar diagramas de


clases
Para más información de referencia sobre los elementos de los diagramas de
clases de UML, vea Diagramas de clases de UML: Referencia.

Nota

En Editar modelos y diagramas UML se describen en detalle los pasos para crear
diagramas de modelado.

Para crear un diagrama de clases de UML


1. En el menú Arquitectura, elija Nuevo UML o diagrama de capas.
2. En Plantillas, elija Diagrama de clases UML.
3. Especifique un nombre para el diagrama.
4. En Agregar a proyecto de modelado, seleccione un proyecto de
modelado existente de la solución o Crear un nuevo proyecto de
modelado y, a continuación, elija Aceptar.
En el cuadro de herramientas Diagrama de clasesUML aparece un
nuevo diagrama de clases.El cuadro de herramientas contiene las
relaciones y elementos necesarios.
Para dibujar un diagrama de clases de UML
1. Para crear un tipo, elija la herramienta Clase, Interfaz o Enumeración del
cuadro de herramientas y, a continuación, haga clic en un espacio en
blanco del diagrama.(Si no puede ver el cuadro de herramientas,
presione CTRL+ALT+X).
2. Para agregar atributos u operaciones a los tipos o agregar literales a una
enumeración, elija el título Atributos, Operaciones o Literales del tipo y
presione ENTRAR.
Puede escribir una firma, como por
ejemplo f(x:Boolean):Integer.Consulte Atributos y operaciones.
Para agregar rápidamente varios elementos, presione ENTRAR dos veces
al final de cada elemento.Puede utilizar las teclas de dirección para subir
y bajar la lista.
3. Para expandir o contraer un tipo, elija el icono de botón de contenido
adicional situado en la parte superior izquierda.También puede expandir
y contraer la sección Atributos y Operaciones de una clase o interfaz.
4. Para dibujar vínculos de asociación, herencia o dependencia entre los
tipos, haga clic en la herramienta adecuada, a continuación, en el tipo de
origen y, por último, en el tipo de destino.
5. Para crear tipos en un paquete, cree un paquete mediante la
herramienta Paquete y, a continuación, cree los tipos y paquetes nuevos
en el paquete.También puede copiarlos con el comando Copiar y
pegarlos después en un paquete.
6. Cada diagrama es una vista de un modelo que comparten otros
diagramas del mismo proyecto.Para ver una vista de árbol del modelo
completo, elija Ver, Otras ventanas, Explorador de modelos UML.

Usar clases, interfaces y enumeraciones


Hay tres tipos estándar de clasificadores disponibles en el cuadro de
herramientas.En este documento, se les denomina tipos.

 Utilice las clases (1) para representar datos o tipos de objetos para la
mayor parte de los propósitos.
 Utilice las interfaces (2) en contextos en los que es necesario diferenciar
entre interfaces puras y clases concretas que tienen implementaciones
internas.Esta diferencia resulta útil cuando el propósito del diagrama es
describir una implementación de software.Resulta menos útil, sin
embargo, cuando se modelan datos pasivos o cuando se definen
contextos que se utilizan para describir los requisitos del usuario.
 Utilice una enumeración (3) para representar un tipo que tiene un
número limitado de valores literales, por ejemplo Stop y Go.
o Agregue los valores literales a la enumeración.Asigne a cada uno
un nombre diferente.
o Si lo desea, también puede proporcionar un valor numérico para
cada valor literal.Abra el menú contextual del literal de la
enumeración, elija Propiedades y, a continuación, escriba un
número en el campo Valor de la ventana Propiedades.
Asigne un nombre único a cada tipo.
Obtener tipos de otros diagramas
Puede hacer que los tipos de otro diagrama aparezcan en su diagrama de clases
de UML.

Otro tipo de
Cómo obtener tipos del otro diagrama
diagrama

Diagrama de Puede hacer que una clase aparezca en varios diagramas de clases de
clases de UML UML.Cuando haya creado una clase en un diagrama, arrastre la clase
del Explorador de modelos UML al otro diagrama.
Esto resulta útil si desea que cada diagrama se concentre en un grupo
de relaciones determinado.
Por ejemplo, puede mostrar las asociaciones entre un Pedido de menú
y el Menú del restaurante en un diagrama y las asociaciones entre
Pedido de menú y Pago en otro diagrama.

Diagrama de Si ha definido interfaces en los componentes de un diagrama de


componentes componentes, puede arrastrar una interfaz del Explorador de
modelos UML al diagrama de clases.En el diagrama de clases, puede
definir los métodos que la interfaz incluye.
Consulte Diagramas de componentes de UML: Instrucciones.

Diagrama de Puede crear clases e interfaces a partir de las líneas de vida de un


secuencia diagrama de secuencia y, a continuación, arrastrar la clase
UML del Explorador de modelos UML a un diagrama de clases de
UML.Cada línea de vida de un diagrama de secuencia representa una
instancia de un objeto, componente o actor.
Para crear una clase a partir de una línea de vida, abra el menú
contextual de la línea de vida y elija Crear clase o Crear
interfaz.Consulte Diagramas de secuencia de UML: Instrucciones.
Atributos y operaciones
Un atributo (4) es un valor con nombre que todas las instancias de un tipo
pueden tener.Cuando se obtiene acceso a un atributo, no se modifica el estado
de la instancia.
Una operación (5) es un método o función que las instancias del tipo pueden
realizar.Puede devolver un valor.Si su propiedad isQuery es true, no se puede
modificar el estado de la instancia.
Para agregar un atributo u operación a un tipo, abra el menú contextual del
tipo, elija Agregar y, a continuación, elija Atributo u Operación.
Para ver sus propiedades, abra el menú contextual del atributo u operación, y
elija Propiedades.Las propiedades aparecen en la ventanaPropiedades.
Para ver las propiedades de los parámetros de una operación, en la
propiedad Parameters, elija [...].Aparece un nuevo cuadro de diálogo
Propiedades.
Para obtener información detallada sobre todas las propiedades que puede
establecer, consulte:
 Propiedades de los atributos de diagramas de clases de UML
 Propiedades de las operaciones de diagramas de clases de UML
Tipos de atributos y operaciones
Los tipos de atributo u operación y los tipos de parámetro pueden ser uno de
los que se detallan a continuación:
 (ninguno): un tipo puede dejarse sin especificar en la firma omitiendo el
signo de dos puntos anterior (:).
 Uno de los tipos primitivos estándar: Booleano, Entero, Cadena.
 Un tipo que esté definido en el modelo.
 Un valor parametrizado de un tipo de plantilla, con el formato
Plantilla<Parámetro>.Vea Tipos de plantilla.
También puede escribir el nombre de un tipo que aún no haya definido en el
modelo.El nombre aparecerá en Tipos sin especificar en el Explorador de
modelos UML.

Nota

Si posteriormente define una clase o interfaz con ese nombre en el modelo, los
atributos y operaciones anteriores todavía harán referencia al elemento en Tipos sin
especificar.Si desea cambiarlos para que hagan referencia a la nueva clase, deberá
visitar cada atributo u operación y restablecer el tipo, seleccionando la nueva clase en
el menú desplegable.
Tipos múltiples
Puede establecer la multiplicidad de cualquier tipo de parámetro, atributo u
operación.
Los valores permitidos son los siguientes:

Multiplicidad El atributo, parámetro o valor devuelto contiene:

[1] Un valor del tipo especificado.Este es el valor predeterminado.

[0..1] Null o un valor del tipo especificado.

[*] Una colección con un número de instancias del tipo especificado.

[1..*] Una colección de al menos una instancia del tipo especificado.

[n..m] Una colección de entre n y m instancias del tipo especificado.

Si la multiplicidad es mayor que 1, también puede establecer estas propiedades:


 IsOrdered: si es true, la colección tiene un orden definido.
 IsUnique: si es true, no hay ningún valor duplicado en la colección.
Visibilidad
La visibilidad indica si se puede obtener acceso al atributo u operación fuera de
la definición de clase.Los valores permitidos son los siguientes:

Forma
Name Significado
abreviada

Público + Accesible desde todos los demás tipos.

Privado - Solamente se puede obtener acceso a la definición interna


de este tipo.

Paquete ~ Solamente se puede obtener acceso dentro del paquete que


contiene este tipo y en los paquetes que lo importan
explícitamente.Vea Definir espacios de nombres y
paquetes.

Protegido # Solamente se puede obtener acceso a este tipo y sus tipos


heredados.Vea Herencia.
Establecer la firma de un atributo u operación
La firma de un atributo u operación es una colección de propiedades entre las
que se incluyen la visibilidad, el nombre, los parámetros (en las operaciones) y el
tipo.
Puede escribir directamente una firma en el diagrama.Haga clic en el atributo u
operación para seleccionarlo y, a continuación, vuelva a hacer clic.
Escriba la firma con el formato:
visibility attribute-name : Type
O bien
visibility operation-name (parameter1 : Type1, ...) : Type
Por ejemplo:
+ AddItem (item : MenuItem, quantity : Integer) : Boolean
Utilice la forma abreviada de visibilidad.El valor predeterminado es + (public).
Los tipos pueden ser tipos definidos en el modelo, tipos estándar, como Entero
o Cadena, o el nombre de un nuevo tipo que no se haya definido todavía.

Nota

Si escribe un nombre sin tipo en una lista de parámetros, especificará el nombre del
parámetro, en lugar de su tipo.En este ejemplo, MenuItem e Integer resultan ser los
nombres de dos parámetros con tipos no especificados:
AddItem(MenuItem, Integer) /* parameter names, not types!*/

Para establecer la multiplicidad de un tipo en una firma, escriba la multiplicidad


entre corchetes tras el nombre de tipo, por ejemplo:
+ AddItems (items : MenuItem [1..*])
+ MenuContent : MenuItem [*]
Si el atributo u operación es estático, su nombre aparecerá subrayado en la
firma.Si es abstracto, el nombre aparecerá en cursiva.
Sin embargo, las propiedades Is Static e Is Abstract solo pueden establecerse
en la ventana Propiedades.
Firma completa
Al modificar la firma de un atributo u operación, algunas propiedades
adicionales pueden aparecer al final de la línea y después de cada
parámetro.Aparecen entre llaves {...}.Puede editar o agregar estas
propiedades.Por ejemplo:
+ AddItems (items: MenuItem [1..*] {unique, ordered})
+ GetItems (filter: String) : MenuItem [*] {ordered, query}
Estas propiedades son las siguientes:

En la Propiedad Significado
firma

unique Es Unique No hay valores duplicados en la colección.Se aplica a tipos


cuya multiplicidad es mayor que 1.

ordered Is La colección es una secuencia.Si es false, no está definido


Ordered el primer elemento.Se aplica a tipos cuya multiplicidad es
mayor que 1.

query Is Query La operación no cambia el estado de la instancia.Solo se


aplica a las operaciones.

/ Is Derived El atributo se calcula a partir de los valores de otros


atributos o asociaciones.
"/" precede al nombre de un atributo.Por ejemplo:
/TotalPrice: Integer

Normalmente, la firma completa solamente aparece en el diagrama mientras se


está editando.Al finalizar la edición, las propiedades adicionales quedan
ocultas.Si desea ver la firma completa en todo momento, abra el menú
contextual del tipo y, a continuación, elija Mostrar signatura completa.

Dibujar y utilizar asociaciones


Utilice una asociación para representar cualquier tipo de vinculación entre dos
elementos, con independencia del modo en que esta vinculación se implemente
en el software.Puede utilizar, por ejemplo, una asociación para representar un
puntero en C#, una relación de una base de datos o una referencia cruzada que
asocie una parte de un archivo XML con otra.Puede representar una asociación
entre objetos en el mundo real, como la tierra y el sol.La asociación no indica
cómo se representa el vínculo, solo que existe la información.
Propiedades de una asociación
Después de crear una asociación, establezca sus propiedades.Abra el menú
contextual de la asociación y, a continuación, elija Propiedades.
Además de las propiedades de toda la asociación, cada rol, es decir, cada
extremo de la asociación, tiene algunas propiedades específicas.Para verlas,
expanda las propiedades First Role y Second Role.
Algunas propiedades de cada uno de los roles pueden verse directamente en el
diagrama.Son las siguientes:
 El nombre del rol.Aparece en el extremo correspondiente de la
asociación del diagrama.Se puede especificar en el diagrama o en la
ventana Propiedades.
 Multiplicity, cuyo valor predeterminado es 1.También aparece en el
diagrama situado junto al extremo correspondiente de la asociación.
 Aggregation.Aparece en un extremo del conector y tiene forma de
diamante.Puede utilizarse para indicar que las instancias del rol que se
están agregando poseen o contienen instancias del otro rol.
 Is Navigable.Si es true solamente en uno de los roles, aparece una flecha
en la dirección navegable.Puede utilizarse para indicar la navegabilidad
de vínculos y relaciones de base de datos en el software.
Para obtener los detalles completos de estas y otras propiedades,
vea Propiedades de las asociaciones de diagramas de clases de UML.
Navegabilidad
Cuando se dibuja una asociación, tiene una flecha en un extremo, lo que
significa que la asociación es navegable en esa dirección.Esto resulta útil si el
diagrama de clases representa las clases de software y las asociaciones
representan punteros o referencias.Sin embargo, cuando se usa un diagrama de
clases para representar entidades y relaciones o conceptos de negocio, es
menos pertinente representar la navegabilidad.En este caso, podría ser
preferible dibujar las asociaciones sin flechas.Puede hacerlo si establece la
propiedad Is Navigable en ambos extremos de la asociación en true.Para que
sea más fácil, puede descargar el ejemplo de código de modelado de dominio
UML.
Atributos y asociaciones
Una asociación es una manera gráfica de mostrar un atributo.Por ejemplo, en
lugar de crear una clase Restaurante con un atributo de tipo Menú, puede
dibujar una asociación entre Restaurante y Menú.
Cada nombre de atributo se transforma en un nombre de rol.Aparece en el
extremo opuesto al tipo propietario de la asociación.Observe, por
ejemplo, myMenu en la ilustración.
Por lo general, resulta más conveniente utilizar los atributos solo en aquellos
tipos que no se van a dibujar en el diagrama, como los tipos primitivos.
Herencia
Utilice la herramienta Herencia para crear las relaciones siguientes:
 Una relación de generalización entre un tipo especializado y un tipo
general.
O bien
 Una relación de realización entre una clase y una interfaz que
implementa.
No se pueden crear bucles en las relaciones de herencia.
Generalización
La generalización significa que el tipo que se especializa o el tipo derivado
heredan los atributos, las operaciones y las asociaciones del tipo general o tipo
base.
El tipo general aparece en el extremo de la relación con la punta de flecha.
Las operaciones y atributos heredados no suelen mostrarse en los tipos
especializados.Sin embargo, pueden agregarse operaciones heredadas a la lista
de operaciones del tipo especializado.Esto resulta útil si desea invalidar algunas
de las propiedades de una operación en el tipo especializado o si desea indicar
que el código que se va a implementar debería hacerlo.
Para invalidar la definición de una operación en un tipo especializado
1. Haga clic en la relación de generalización.
Aparecerá resaltada junto a una etiqueta de acción.
2. Haga clic en la etiqueta de acción y, a continuación, en Invalidar
operaciones.
Aparece el cuadro de diálogo Invalidar operaciones.
3. Seleccione las operaciones que desea que aparezcan en el tipo
especializado y, a continuación, haga clic en Aceptar.
Las operaciones que seleccionó aparecen ahora en el tipo especializado.
Realización
La realización significa que una clase implementa los atributos y operaciones
especificados por la interfaz.La interfaz se encuentra en el extremo del conector
que tiene la flecha.
Al crear un conector de realización, las operaciones de la interfaz se replican
automáticamente en la clase que se realiza.Si se agregan nuevas operaciones a
una interfaz, estas operaciones se replicarán en las clases que se realizan.
Después de crear una relación de realización, puede transformarla en una
notación circular.Haga clic con el botón secundario del mouse en la relación y
elija Mostrar como círculo.
De este modo, puede mostrar las interfaces que una clase implementa sin llenar
los diagramas de clases con vínculos de realización.También puede mostrar la
interfaz y las clases que la realizan en diagramas independientes.
Tipos de plantilla
Puede definir un tipo genérico o un tipo de plantilla que otros tipos o valores
puedan parametrizar.
Por ejemplo, puede crear un Diccionario genérico parametrizado por tipos de
valor y clave:

Para crear un tipo de plantilla


1. Cree una clase o interfaz.Este objeto pasará a ser el tipo de
plantilla.Asígnele el nombre apropiado, por ejemplo Dictionary.
2. Abra el menú contextual del nuevo tipo y, a continuación,
elija Propiedades.
3. En la ventana Propiedades, en el campo Template Parameters, haga
clic en [...].
Aparecerá el cuadro de diálogo Editor de colecciones de parámetros
de plantillas.
4. Elija Agregar.
5. Establezca la propiedad de nombre en el nombre de un parámetro del
tipo de plantilla, por ejemplo, Key.
6. Establezca Tipo de parámetro.El valor predeterminado es Clase.
7. Si desea que el parámetro acepte solamente clases derivadas de una
clase base determinada, establezca Valor restringido en la clase base
que desee.
8. Agregue tantos parámetros como necesite y, a continuación,
elija Aceptar.
9. Agregue atributos y operaciones al tipo de plantilla del mismo modo que
lo haría en otras clases.
Puede utilizar parámetros cuyo tipo
sea Clase, Interfaz o Enumeración en la definición de atributos y
operaciones.Por ejemplo, si utiliza las clases de parámetros Key y Value,
puede definir esta operación en Dictionary:
Get(k : Key) : Value
Puede utilizar un parámetro cuyo tipo Entero sea un límite de
multiplicidad.Por ejemplo, el valor entero máximo de un parámetro
podría utilizarse para definir la multiplicidad de un atributo
como [0..max].
Una vez creados los tipos de plantilla, puede utilizarlos para definir los enlaces
de la plantilla:

Para utilizar un tipo de plantilla


1. Cree un nuevo tipo, por ejemplo, AddressTable.
2. Abra el menú contextual del nuevo tipo y, a continuación,
elija Propiedades.
3. En la propiedad Template Binding, seleccione el tipo de plantilla, por
ejemplo Dictionary, en la lista desplegable.
4. Expanda la propiedad Template Binding.
Aparecerá una fila para cada parámetro del tipo de plantilla.
5. Establezca cada parámetro en un valor apropiado.Por ejemplo, establezca
el parámetro Key en una clase denominada Name.

Paquetes
Puede ver los paquetes en un diagrama de clases de UML.Un paquete es un
contenedor de otros elementos del modelo.Puede crear cualquier elemento
dentro de un paquete.En el diagrama, los elementos incluidos en el paquete se
desplazarán al mover el paquete.
Puede utilizar el control de expandir y contraer para ocultar o mostrar el
contenido del paquete.
Consulte Definir espacios de nombres y paquetes.

Generar código a partir de diagramas de


clases de UML
Para iniciar la implementación de las clases en un diagrama de clases UML,
puede generar código C# o personalizar plantillas para la generación de
código.Para iniciar la generación de código usando las plantillas de C#
proporcionadas:
 Abra el menú contextual del diagrama o un elemento, elija Generar
código y establezca las propiedades necesarias.
Para más información sobre cómo establecer estas propiedades y
personalizar las plantillas proporcionadas, vea Generar código a partir de
diagramas de clases UML.

La restricción "check" especifica los valores que acepta un campo, evitando


que se ingresen valores inapropiados.

La sintaxis básica es la siguiente:

alter table NOMBRETABLA


add constraint NOMBRECONSTRAINT
check CONDICION;

Trabajamos con la tabla "libros" de una librería que tiene los siguientes
campos: codigo, titulo, autor, editorial, preciomin (que indica el precio para
los minoristas) y preciomay (que indica el precio para los mayoristas).

Los campos correspondientes a los precios (minorista y mayorista) se definen


de tipo decimal(5,2), es decir, aceptan valores entre -999.99 y 999.99.
Podemos controlar que no se ingresen valores negativos para dichos campos
agregando una restricción "check":

alter table libros


add constraint CK_libros_precio_positivo
check (preciomin>=0 and preciomay>=0);

Este tipo de restricción verifica los datos cada vez que se ejecuta una
sentencia "insert" o "update", es decir, actúa en inserciones y actualizaciones.

Si la tabla contiene registros que no cumplen con la restricción que se va a


establecer, la restricción no se puede establecer, hasta que todos los registros
cumplan con dicha restricción.

La condición puede hacer referencia a otros campos de la misma tabla. Por


ejemplo, podemos controlar que el precio mayorista no sea mayor al precio
minorista:

alter table libros


add constraint CK_libros_preciominmay
check (preciomay<=preciomin);

Por convención, cuando demos el nombre a las restricciones "check"


seguiremos la misma estructura: comenzamos con "CK", seguido del nombre
de la tabla, del campo y alguna palabra con la cual podamos identificar
fácilmente de qué se trata la restricción, por si tenemos varias restricciones
"check" para el mismo campo.
Un campo puede tener varias restricciones restricciones "check" y una
restricción "check" puede incluir varios campos.

Las condiciones para restricciones "check" también pueden pueden incluir un


patrón o una lista de valores. Por ejemplo establecer que cierto campo conste
de 4 caracteres, 2 letras y 2 dígitos:

...
check (CAMPO like '[A-Z][A-Z][0-9][0-9]');

O establecer que cierto campo asuma sólo los valores que se listan:

...
check (CAMPO in ('lunes','miercoles','viernes'));

No se puede aplicar esta restricción junto con la propiedad "identity".

Si un campo permite valores nulos, "null" es un valor aceptado aunque no esté


incluido en la condición de restricción.

Si intentamos establecer una restricción "check" para un campo que entra en


conflicto con otra restricción "check" establecida al mismo campo, SQL Server
no lo permite.

Pero si establecemos una restricción "check" para un campo que entra en


conflicto con una restricción "default" establecida para el mismo campo, SQL
Server lo permite; pero al intentar ingresar un registro, aparece un mensaje
de error.
Crear restricciones CHECK
SQL Server 2014

Otras versiones

Puede crear una restricción CHECK en una tabla para especificar los valores de
datos aceptables en una o más columnas de SQL Server 2014 mediante SQL
Server Management Studio o Transact-SQL.
En este tema
 Antes de empezar:
Seguridad
 Para crear una restricción CHECK nueva con:
SQL Server Management Studio
Transact-SQL

Antes de empezar
Seguridad
Permisos
Requiere permisos ALTER en la tabla.

Usar SQL Server Management Studio


Para crear una restricción CHECK nueva
1. En el Explorador de objetos, expanda la tabla a la que desea agregar
una restricción CHECK, haga clic con el botón secundario
enRestricciones y haga clic en Nueva restricción.
2. En el cuadro de diálogo Comprobar restricciones, haga clic en el
campo Expresión y, a continuación, haga clic en los puntos
suspensivos(…).
3. En el cuadro de diálogo Expresión de restricción CHECK, escriba
expresiones SQL para la restricción CHECK.Por ejemplo, para limitar las
entradas de la columna SellEndDate de la tabla Product a un valor que
sea mayor o igual que la fecha de la columna SellStartDate o que sea
un valor NULL, escriba:
4. SellEndDate >= SellStartDate OR SellEndDate IS NULL
O bien, para exigir que las entradas que se escriben en la
columna zip tengan 5 dígitos, escriba:
zip LIKE '[0-9][0-9][0-9][0-9][0-9]'

Nota

Asegúrese de que escribe los valores de restricción no numéricos entre comillas


sencillas (').

5. Haga clic en Aceptar.


6. En la categoría Identidad, puede cambiar el nombre de la restricción
CHECK y agregar una descripción (propiedad extendida) para la
restricción.
7. En la categoría Diseñador de tablas, puede definir cuándo debe exigirse
la restricción.

Seleccione Sí en los campos


Para:
siguientes:

Pruebe la restricción en los datos existentes Comprobar los datos


antes de que se creara la restricción existentes al crear o habilitar

Exigir la restricción siempre que se produzca Exigir para replicación


una operación de replicación en esta tabla

Exigir la restricción siempre que se inserte o Exigir para comandos


actualice una fila de esta tabla INSERT y UPDATE

8. Haga clic en Cerrar.

Usar Transact-SQL
Para crear una restricción CHECK nueva
1. En el Explorador de objetos, conéctese a una instancia del Motor de
base de datos.
2. En la barra Estándar, haga clic en Nueva consulta.
3. Copie y pegue el siguiente ejemplo en la ventana de consulta y haga clic
en Ejecutar.
4. ALTER TABLE dbo.DocExc
5. ADD ColumnD int NULL
6. CONSTRAINT CHK_ColumnD_DocExc
7. CHECK (ColumnD > 10 AND ColumnD < 50);
8. GO
9. -- Adding values that will pass the check constraint
10. INSERT INTO dbo.DocExc (ColumnD) VALUES (49);
11. GO
12. -- Adding values that will fail the check constraint
13. INSERT INTO dbo.DocExc (ColumnD) VALUES (55);
14. GO
15.
Para obtener más información, vea ALTER TABLE (Transact-SQL).

Restricciones UNIQUE y
restricciones CHECK
SQL Server 2014

Otras versiones

Las restricciones UNIQUE y las restricciones CHECK son dos tipos de


restricciones que se pueden usar para exigir la integridad de los datos en las
tablas de SQL Server.Se trata de objetos de base de datos importantes.
Este tema contiene las siguientes secciones.
Restricciones UNIQUE
Restricciones CHECK
Tareas relacionadas

Restricciones UNIQUE
Las restricciones son reglas que Motor de base de datos de SQL Server aplica de
forma automática.Por ejemplo, puede usar restricciones UNIQUE para garantizar
que no se escriben valores duplicados en columnas específicas que no forman
parte de una clave principal.Tanto la restricción UNIQUE como la restricción
PRIMARY KEY exigen la unicidad; sin embargo, debe usar la restricción UNIQUE
y no PRIMARY KEY si desea exigir la unicidad de una columna o una
combinación de columnas que no forman la clave principal.
A diferencia de las restricciones PRIMARY KEY, las restricciones UNIQUE
permiten valores NULL.Sin embargo, de la misma forma que cualquier valor
incluido en una restricción UNIQUE, solo se admite un valor NULL por
columna.Es posible hacer referencia a una restricción UNIQUE con una
restricción FOREIGN KEY.
Cuando se agrega una restricción UNIQUE a una o varias columnas de la tabla,
de forma predeterminada, el Motor de base de datos examina los datos
existentes en las columnas para garantizar que todos los valores sean únicos.Si
se agrega una restricción UNIQUE a una columna que contiene valores
duplicados, Motor de base de datos devuelve un error y no agrega la
restricción.
Motor de base de datos crea automáticamente un índice UNIQUE para exigir, de
acuerdo con la restricción UNIQUE, que no haya duplicados.Por lo tanto, si se
intenta insertar una fila duplicada, Motor de base de datos devolverá un
mensaje de error para indicar que se ha infringido la restricción UNIQUE y no se
agregará la fila a la tabla.A menos que se especifique explícitamente un índice
clúster, se creará de forma predeterminada un índice único, no clúster, para
exigir la restricción UNIQUE.

Restricciones CHECK
Las restricciones CHECK exigen la integridad del dominio mediante la limitación
de los valores que puede aceptar una o varias columnas.Puede crear una
restricción CHECK con cualquier expresión lógica (booleana) que devuelva TRUE
(verdadero) o FALSE (falso) basándose en operadores lógicos.Por ejemplo, es
posible limitar el intervalo de valores para una columna salary creando una
restricción CHECK que solo permita datos entre 15 000 y 100 000 USD.Esto evita
que los salarios caigan fuera del intervalo de salario normal.La expresión lógica
sería la siguiente: salary >= 15000 AND salary <= 100000.
Puede aplicar varias restricciones CHECK a una sola columna.También puede
aplicar una sola restricción CHECK a varias columnas si se crea en el nivel de la
tabla.Por ejemplo, una restricción CHECK para varias columnas se podría usar
para confirmar que cualquier fila con un valor USA en la
columna country_region tiene también un valor de dos caracteres en la
columna state.Así se pueden comprobar varias condiciones en un mismo sitio.
Las restricciones CHECK son similares a las restricciones FOREIGN KEY porque
controlan los valores que se colocan en una columna.La diferencia reside en la
forma en que determinan qué valores son válidos: las restricciones FOREIGN
KEY obtienen la lista de valores válidos de otra tabla, mientras que las
restricciones CHECK determinan los valores válidos a partir de una expresión
lógica.

Precaución
Las restricciones que incluyen la conversión de tipos de datos implícitos o explícitos
pueden impedir la correcta ejecución de determinadas operaciones.Por ejemplo, las
restricciones definidas en tablas que son orígenes de un cambio de partición pueden
impedir que una operación ALTER TABLE...SWITCH se realice correctamente.Evite
la conversión de tipos de datos en las definiciones de las restricciones.

Limitaciones de las restricciones CHECK


Las restricciones CHECK rechazan los valores que se evalúan como FALSE.Puesto
que los valores nulos se evalúan como UNKNOWN, su presencia en las
expresiones puede reemplazar una restricción.Por ejemplo, supongamos que
coloca una restricción en una columna intMyColumn que especifica
que MyColumn solo puede contener el valor 10 (MyColumn=10).Si inserta el
valor NULL en MyColumn, Motor de base de datos inserta NULL y no devuelve
un error.
Una restricción CHECK devuelve TRUE cuando la condición que está
comprobando no es FALSE para ninguna fila de la tabla.Una restricción CHECK
opera en el nivel de fila.Si una tabla recién creada no tiene filas, cualquier
restricción CHECK en esta tabla se considerará válida.Esta situación puede
generar resultados inesperados, como en el siguiente ejemplo.
CREATE TABLE CheckTbl (col1 int, col2 int);
GO
CREATE FUNCTION CheckFnctn()
RETURNS int
AS
BEGIN
DECLARE @retval int
SELECT @retval = COUNT(*) FROM CheckTbl
RETURN @retval
END;
GO
ALTER TABLE CheckTbl
ADD CONSTRAINT chkRowCount CHECK (dbo.CheckFnctn() >= 1 );
GO
La restricción CHECK que se agrega especifica que como mínimo debe existir
una fila en la tabla CheckTbl.Sin embargo, puesto que no hay filas en la tabla
contra la que se comprueba la condición de esta restricción, la instrucción
ALTER TABLE será correcta.
Las restricciones CHECK no se validan durante las instrucciones DELETE.Por lo
tanto, la ejecución de instrucciones DELETE en las tablas con ciertos tipos de
restricciones CHECK puede generar resultados inesperados.Por ejemplo,
imaginemos que las siguientes instrucciones se ejecutan en la tabla CheckTbl.
INSERT INTO CheckTbl VALUES (10, 10);
GO
DELETE CheckTbl WHERE col1 = 10;
La instrucción DELETE será correcta aunque la restricción CHECK especifique que
la tabla CheckTbl debe tener al menos 1 fila.

Tareas relacionadas

Nota

Si se publica la tabla para la replicación, debe modificar el esquema mediante la


instrucción Transact-SQL ALTER TABLE o SMO (Objetos de administración de SQL
Server).Si se modifica el esquema mediante el Diseñador de tablas o el Diseñador de
diagramas de base de datos, se intentará eliminar la tabla y volver a crearla.No se
pueden eliminar objetos publicados, por lo que la modificación del esquema generará
un error.

Tarea Tema

Describe cómo crear una restricción UNIQUE. Crear restricciones UNIQUE

Describe cómo modificar una restricción Modificar restricciones UNIQUE


UNIQUE.

Describe cómo eliminar una restricción Eliminar restricciones UNIQUE


UNIQUE.

Describe cómo deshabilitar una restricción Deshabilitar restricciones CHECK


CHECK cuando un agente de replicación inserta para la replicación
o actualiza datos en una tabla.

Describe cómo deshabilitar una restricción Deshabilitar restricciones CHECK


CHECK al agregar, actualizar o eliminar datos en con instrucciones INSERT y
una tabla. UPDATE

Describe cómo cambiar la expresión de Modificar restricciones CHECK


restricción o las opciones que la habilitan o
deshabilitan en condiciones específicas.

Describe cómo eliminar una restricción CHECK. Eliminar restricciones CHECK


Describe cómo ver las propiedades de una
restricción CHECK.

Вам также может понравиться