22. Hoja de Respuestas

22.1. Results For Añadiendo Tu Primera Capa

22.1.1. basic Preparación

In the main area of the dialog you should see many shapes with different colors. Each shape belongs to a layer you can identify by its color in the left panel (your colors may be different from the ones below):

../../../_images/basic_map.png

Volver al texto

22.2. Results For Un resumen de la Interfaz

22.2.1. basic Resumen (Parte 1)

Refiérase a la imagen que muestra el diseño de la interfaz y comprobar que recuerdas los nombres y las funciones de los elementos de la pantalla.

Volver al texto

22.2.2. basic Resumen (Parte 2)

  1. Guardar como

  2. Zoom a la capa

  3. Invert selection

  4. Renderizado on/off

  5. Línea de medida

Volver al texto

22.3. Results For Trabajando con Datos Vector

22.3.1. basic Attribute data

  • There should be 9 fields in the rivers layer:

    1. Select the layer in the Layers panel.

    2. Right-click and choose Open Attribute Table, or press the openTable button on the Attributes Toolbar.

    3. Count the number of columns.

    Truco

    A quicker approach could be to double-click the rivers layer, open the Layer properties ‣ Fields tab, where you will find a numbered list of the table’s fields.

  • Information about towns is available in the places layer. Open its attribute table as you did with the rivers layer: there are two features whose place attribute is set to town: Swellendam and Buffeljagsrivier. You can add comment on other fields from these two records, if you like.

Back to text

22.3.2. basic Data loading

Your map should have seven layers:

  • protected_areas

  • lugares

  • rivers

  • roads

  • landuse

  • buildings (taken from training_data.gpkg) and

  • water (taken from exercise_data/shapefile).

Back to text

22.4. Results For Simbología

22.4.1. basic Colores

  • Comprueba que los colores están cambiando como esperas que cambien.

  • It is enough to select the water layer in the legend and then click on the symbology Open the Layer Styling panel button. Change the color to one that fits the water layer.

../../../_images/answer_water_blue.png

Nota

If you want to work on only one layer at a time and don’t want the other layers to distract you, you can hide a layer by clicking in the checkbox next to its name in the layers list. If the box is blank, then the layer is hidden.

Volver al texto

22.4.2. basic Estructura de símbolos

Ahora tu mapa debería aparecer así:

../../../_images/answer_symbology1.png

Si tu eres un usuario principiante, puede detenerse aquí.

  • Use el método anterior para cambiar los colores y estilos a todas las capas restantes.

  • Trata de usar colores naturales para los objetos. Por ejemplo, una carretera no debería ser roja o azul, pero si puede ser gris o negro.

  • Also feel free to experiment with different Fill style and Stroke style settings for the polygons.

../../../_images/answer_symbology2.png

Volver al texto

22.4.3. moderate Capas de símbolos

Personaliza tu construcciones capa como gustes, pero recuerda que tiene que ser fácil de contar las diferentes partes del mapa.

He aquí un ejemplo:

../../../_images/answer_buildings_symbology.png

Volver al texto

22.4.4. moderate Niveles de símbolo

To make the required symbol, you need three symbol layers:

../../../_images/answer_road_symbology.png

The lowest symbol layer is a broad, solid gray line. On top of it there is a slightly thinner solid yellow line and finally another thinner solid black line.

If your symbol layers resemble the above but you’re not getting the result you want:

  1. Check that your symbol levels look something like this:

    ../../../_images/answer_road_symbol_levels.png
  2. Ahora tu mapa debería tener este aspecto:

    ../../../_images/target_road_symbology.png

Volver al texto

22.4.5. hard Niveles de símbolo

  1. Ajustar tus niveles de símbolo a estos valores:

    ../../../_images/answer_road_symbol_layers.png
  2. Probar con diferentes valores para dar diferentes resultados.

  3. Abrir de nuevo su mapa original antes de continuar con el siguiente ejercicio.

Volver al texto

22.5. moderate Outline Markers

Here are examples of the symbol structure:

../../../_images/answer_marker_line.png
../../../_images/answer_marker_line2.png

Back to text

22.5.1. hard Geometry generator symbology

  • Click on the signPlus button to add another Symbol level.

  • Move the new symbol at the bottom of the list clicking the arrowDown button.

  • Choose a good color to fill the water polygons.

  • Click on Marker of the Geometry generator symbology and change the circle with another shape as your wish.

  • Try experimenting other options to get more useful results.

Back to text

22.6. Results For Atributo de dato

22.6.1. basic * Atributo de dato*

The name field is the most useful to show as labels. This is because all its values are unique for every object and are very unlikely to contain NULL values. If your data contains some NULL values, do not worry as long as most of your places have names.

Volver al texto

22.7. Results For Labels

22.7.1. moderate Personalizarción de Etiqueta (Parte 1)

Your map should now show the marker points and the labels should be offset by 2mm. The style of the markers and labels should allow both to be clearly visible on the map:

../../../_images/customised_labels_one.png

Volver al texto

22.7.2. moderate Personalizarción de Etiqueta (Parte 2)

Una posible solución tiene este producto final:

../../../_images/possible_outcome_map.png

Para llegar a este resultado:

  • Use a font size of 10

  • Use an around point placement distance of 1.5 mm

  • Use a marker size of 3.0 mm

  • In addition, this example uses the Wrap on character option:

    ../../../_images/wrap_character_settings.png
  • Enter a space in this field and click Apply to achieve the same effect. In our case, some of the place names are very long, resulting in names with multiple lines which is not very user friendly. You might find this setting to be more appropriate for your map.

Volver al texto

22.7.3. hard Utilización de la configuración de definición de datos

  1. Still in edit mode, set the FONT_SIZE values to whatever you prefer. The example uses 16 for towns, 14 for suburbs, 12 for localities, and 10 for hamlets.

  2. Remember to save changes and exit edit mode

  3. Return to the Text formatting options for the places layer and select FONT_SIZE in the Attribute field of the font size dataDefined data defined override dropdown:

    ../../../_images/font_size_override.png

    Sus resultados, si usó los valores antes mencionados, debería ser esto:

    ../../../_images/font_override_results.png

Volver al texto

22.8. Results For Clasificación

22.8.1. moderate Refinar la clasificación

The settings you used might not be the same, but with the values Classes = 6 and Mode = Natural Breaks (Jenks) (and using the same colors, of course), the map will look like this:

../../../_images/gradient_map_new_mode.png

Volver al texto

22.9. Results For Creando un nuevo conjunto de datos vector

22.9.1. basic Digitalizar

La simbología no importa, pero los resultados deberían verse más o menos como esto:

../../../_images/routes_layer_result.png

Volver al texto

22.9.2. moderate Topología: Herramienta de agregar anillo

La forma exacta no importa, pero debería estar recibiendo un agujero en medio de su rasgo, como la siguiente:

../../../_images/ring_tool_result.png
  • Deshacer su edición antes de continuar con el ejercicio con la siguiente herramienta.

Volver al texto

22.9.3. moderate Topología: Herramienta de agregar parte

  • Primero selecciona el Bontebok National Park:

../../../_images/park_selected.png
  • Ahora agregar su nueva parte:

../../../_images/new_park_area.png
  • Deshacer su edición antes de continuar con el ejercicio con la siguiente herramienta.

Volver al texto

22.9.4. hard Unir objetos espaciales

  • Use la herramienta Merge Selected Features, para estar seguro, primero seleccione los poligonos que desee unir.

  • Use el rasgo con el OGC_FID de 1 como la fuente de sus atributos (clic en la entrada correspondiente de la ventana de dialogo, después clic en el botón Tomar los atributos del rasgo seleccionado):

Nota

Si estas usando diferente conjunto de datos, es altamente probable que su

Polígono original OGC_FID no será 1. Solo tiene que elegir el rasgo que tiene un OGC_FID.

../../../_images/merge_feature_dialog.png

Nota

Usando la herramienta Unir atributos de los rasgos seleccionados mantendrá las distintas geometrías, pero les dará los mismo atributos.

Volver al texto

22.9.5. moderate Formas

Para el TIPO, hay obviamente un cantidad límite de tipos que una carretera puede tener, si revisa la tabla de atributos de la capa, verá que están predefinidos.

  • Establecer el widget a Valor del mapa y clic Cargar datos de la capa.

  • Seleccionar Carreteras in el Etiqueta desplegable y autopista para ambos las opciones de Valor y Descripción:

    ../../../_images/value_map_settings.png
  • Click OK three times.

  • Si usa la herramienta Identificación en una calle mientras esta activo el modo edición, la ventana de dialogo que deberías ver será como esto:

    ../../../_images/highway_as_value_map.png

Volver al texto

22.10. Results For Análisis Vector

22.10.1. basic Distancia desde institutos

  • Su diálogo de buffer debería parecerse a esto:

    ../../../_images/schools_buffer_setup.png

    The Buffer distance is 1 kilometer.

  • The Segments to approximate value is set to 20. This is optional, but it’s recommended, because it makes the output buffers look smoother. Compare this:

    ../../../_images/schools_buffer_5.png

    A esto:

    ../../../_images/schools_buffer_6.png

The first image shows the buffer with the Segments to approximate value set to 5 and the second shows the value set to 20. In our example, the difference is subtle, but you can see that the buffer’s edges are smoother with the higher value.

Volver al texto

22.10.2. basic Distancia de restaurantes

To create the new houses_restaurants_500m layer, we go through a two step process:

  • Primero, crear un buffer de 500m alrededor de los restaurantes y agregar la capa al mapa:

    ../../../_images/restaurants_buffer.png
    ../../../_images/restaurants_buffer_result.png
  • Next, extract buildings within that buffer area:

    ../../../_images/select_within_restaurants.png

Su mapa debe mostrar solo aquellos edificios que estén a menos de 50m de la carretera, 1 km de la escuela y 500m de un restaurante:

../../../_images/restaurant_buffer_result.png

Volver al texto

22.11. Results For Network Analysis

22.12. moderate Fastest path

Open Network Analysis ‣ Shortest Path (Point to Point) and fill the dialog as:

../../../_images/fastest_path_result.png

Make sure that the Path type to calculate is Fastest.

Click on Run and close the dialog.

Open now the attribute table of the output layer. The cost field contains the travel time between the two points (as fraction of hours):

../../../_images/fastest_path_attribute.png

Back to text

22.13. Results For Análisis Raster

22.13.1. basic Calcular Aspect

  • Set your Aspect dialog up like this:

    ../../../_images/answer_dem_aspect.png

Su resultado:

../../../_images/answer_aspect_result.png

Volver al texto

22.13.2. moderate Calcular pendiente (menos de 2 y 5 grados)

  • Establezca su dialogo Calculadora Raster como esto:

    ../../../_images/answer_raster_calculator_slope.png
  • For the 5 degree version, replace the 2 in the expression and file name with 5.

Sus resultados:

  • 2 grados:

    ../../../_images/answer_2degree_result.png
  • 5 grados:

    ../../../_images/answer_5degree_result.png

Volver al texto

22.14. Results For Completando el Análisis

22.14.1. moderate de Raster a Vector

  • Open the Query Builder by right-clicking on the all_terrain layer in the Layers panel, and selecting the Properties ‣ Source tab.

  • Después construir la consulta "suitable" = 1.

  • Clic OK para filtrar todos los polígonos que no cumplan con esa condición.

Cuando vea el raster original, el área debe sobreponerse perfectamente:

../../../_images/polygonize_raster.png
  • You can save this layer by right-clicking on the all_terrain layer in the Layers panel and choosing Save As…, then continue as per the instructions.

Volver al texto

22.14.2. moderate Revisando los resultados

Podrá notar que algunos de los edificios en su capa nueva_solución han sido «cortados» por la herramienta Intersectar. Esto muestra que sólo parte del edificio -y por lo tanto solamente parte de la propiedad- se ubica en un terreno adecuado. Podemos entonces con seguridad eliminar esos edificios de nuestro Conjunto de datos.

Volver al texto

22.14.3. moderate Afinando el Análisis

Por el momento, su análisis deberá verse más o menos así:

../../../_images/new_solution_example.png

Considera un área circular, con 100 metros a la redonda

../../../_images/circle_100.png

Si es más grande que 100 metros de radio, entonces extraer 100 metros de su tamaño (en todas las direcciones) resultará en que una parte de el quede sobrante en el medio.

../../../_images/circle_with_remainder.png

Por lo tanto, puede ejecutar un buffer interior de 100 metros en su capa vectorial existente terreno_apto. En el resultado de la aplicación de la función buffer, lo que sea que quede en la capa original representará áreas en donde hay terreno apto más allá de los 100.

Para demostrar:

  • Ir a Vector ‣ Herramientas de Geoprocesamiento ‣ Buffer(s) para abrir el diálogo de Buffer(s).

  • Configúralo así:

    ../../../_images/suitable_terrain_buffer.png
  • Use la capa terreno_apto con 10 segmentos y una distancia de buffer de -100. (La distancia es automáticamente reconocida en metros debido a que su mapa está usando un SRC proyectado).

  • Guarda la capa resultante en datos_ejercicio/desarrollo_residencial/ como terreno_apto_continuos100m.shp.

  • Si es necesario, mueva la nueva capa encima de su capa original terreno_apto.

Sus resultados se verán más o menos así:

../../../_images/suitable_buffer_results.png
  • Ahora utilice la herramienta Selección por ubicación (Vector ‣ Herramientas de investigación ‣ Selección por ubicación).

  • Configurar de la siguiente manera:

    ../../../_images/select_by_location.png
  • Seleccione elementos en nueva_solución que intersecte elementos de terreno_apto_continuos100m.shp.

Este es el resultado:

../../../_images/buffer_select_result.png

Los edificios en color amarillo están seleccionados. Aunque algunos de los edificios caen parcialmente afuera de la nueva capa terreno_apto_continuos100m.shp, caen bien dentro de la capa original terreno_apto y por lo tanto cumplen con todos nuestros requerimientos.

  • Guarde la selección en datos_ejercicio/desarrollo_residencial/ con el nombre respuesta_final.shp.

Volver al texto

22.15. Results For WMS

22.15.1. basic |FA| Cargar otra Capa WMS

Su mapa debería verse así (puede que necesite re-ordenar las capas):

../../../_images/geology_layer_result.png

Volver al texto

22.15.2. moderate Agregando un Nuevo Servidor WMS

  • Utilice el mismo método que antes para agregar el nuevo servidor y la capa adecuada según como se encuentre alojada en el servidor:

    ../../../_images/add_ogc_server.png
    ../../../_images/add_bluemarble_layer.png
  • Si realiza un acercamiento en el área Swellendam, notará que este conjunto de datos tiene una baja resolución.

../../../_images/low_resolution_dataset.png

Por lo tanto, es mejor no usar este dato para el mapa actual. El dato de Blue Marble es más apropiado para las escalas nacionales y globales.

Volver al texto

22.15.3. moderate Agregando un Nuevo Servidor WMS

You may notice that many WMS servers are not always available. Sometimes this is temporary, sometimes it is permanent. An example of a WMS server that worked at the time of writing is the World Mineral Deposits WMS at http://apps1.gdr.nrcan.gc.ca/cgi-bin/worldmin_en-ca_ows. It does not require fees or have access constraints, and it is global. Therefore, it does satisfy the requirements. Keep in mind, however, that this is merely an example. There are many other WMS servers to choose from.

Volver al texto

22.16. Results For GRASS Integration

22.16.1. basic Add Layers to Mapset

You can add layers (both vector and raster) into a GRASS Mapset by drag and drop them in the Browser (see Follow Along: Load data using the QGIS Browser) or by using the v.in.gdal.qgis for vector and r.in.gdal.qgis for raster layers.

Back to text

22.16.2. moderate Reclassify raster layer

To discover the maximum value of the raster run the r.info tool: in the console you will see that the maximum value is 1699.

You are now ready to write the rules. Open a text editor and add the following rules:

0 thru 1000 = 1
1000 thru 1400 = 2
1400 thru 1699 = 3

save the file as a my_rules.txt file and close the text editor.

Run the r.reclass tool, choose the g_dem layer and load the file containing the rules you just have saved.

Click on Run and then on View Output. You can change the colors and the final result should look like the following picture:

../../../_images/grass_reclass.png

Back to text

22.17. Results For Conceptos de Bases de Datos

22.17.1. basic Propiedades de la Tabla de Direcciones

Para nuestra tabla de direcciones teórica, podríamos querer almacenar las siguientes propiedades:

House Number
Street Name
Suburb Name
City Name
Postcode
Country

Al crear la tabla para representar un objeto de dirección, crearemos columnas para representar cada una de estas propiedades y les estaríamos asignando nombres compatibles con SQL y posiblemente nombres cortos

house_number
street_name
suburb
city
postcode
country

Volver al texto

22.17.2. basic Normalizando la Tabla de Personas

El mayor problema con la capa de gente es que hay solo un campo de dirección que contiene los datos de domicilio de las personas. Pensando en nuestra tabla teórica direccion anteriormente en esta lección, sabemos que una dirección esta compuesta por varias propiedades. Mediante el almacenamiento de todas estas propiedades en un solo campo, con esto haremos mucho mas difícil la actualización y la consulta de nuestros datos. Por lo tanto tenemos que dividir el campo de dirección en varias propiedades. Esto nos daría una tabla que tenga las siguiente estructura:

id |     name      | house_no |  street_name   |    city    |   phone_no
 --+---------------+----------+----------------+------------+-----------------
 1 | Tim Sutton    |     3    | Buirski Plein  | Swellendam | 071 123 123
 2 | Horst Duester |     4    | Avenue du Roix | Geneva     | 072 121 122

Nota

En la siguiente sección, aprenderemos acerca de relaciones de llave foránea, que podrán ser usados en este ejemplo para mejorar aún más la estructura de nuestra base de datos.

Volver al texto

22.17.3. moderate Además normalización de la tabla de Personas

Actualmente nuestra tabla de personas se ve así:

id |     name     | house_no | street_id |  phone_no
---+--------------+----------+-----------+-------------
 1 | Horst Duster |        4 |         1 | 072 121 122

La columna street_id representa una relacion “uno a muchos” entre el objeto personas y el objeto relacionado calle, que esta en la tabla de calles.

Una forma para normalizar aún más la tabla es dividir el nombre del campo en nombre y apellido:

id | first_name | last_name  | house_no | street_id |  phone_no
---+------------+------------+----------+-----------+------------
 1 |    Horst   |   Duster   |     4    |     1     | 072 121 122

Podemos crear también tablas independientes para nombre pueblo o ciudad y país, enlazándolos a nuestra tabla de personas a través de una relación de “uno a muchos”:

id | first_name | last_name | house_no | street_id | town_id | country_id
---+------------+-----------+----------+-----------+---------+------------
 1 |    Horst   |   Duster  |     4    |     1     |    2    |     1

Un diagrama de ER para representar esto sería así:

../../../_images/er-people-normalised-example.png

Volver al texto

22.17.4. moderate Crear una tabla de Personas

El SQL necesario para crear la tabla correcta de personas es:

create table people (id serial not null primary key,
                     name varchar(50),
                     house_no int not null,
                     street_id int not null,
                     phone_no varchar null );

El esquema para la tabla (introduzca \d people) se ve así:

Table "public.people"

Column     |         Type          |                      Modifiers
-----------+-----------------------+-------------------------------------
id         | integer               | not null default
           |                       | nextval('people_id_seq'::regclass)
name       | character varying(50) |
house_no   | integer               | not null
street_id  | integer               | not null
phone_no   | character varying     |
Indexes:
  "people_pkey" PRIMARY KEY, btree (id)

Nota

Para fines de ilustración, hemos omitido a propósito la restricción del fkey.

Volver al texto

22.17.5. basic El comando DROP

El motivo del comando DROP no funcionaría en este caso, porque la tabla personas tiene un restricción de llave foránea para la tabla calles. Esto significa que dropping (o eliminar) la tabla de calles dejaría a la tabla de personas con las referencias a calles de datos no existentes.

Nota

Es posible para “fuerza” la tabla de calles para ser eliminado mediante el uso del comando CASCADE, pero también se eliminaría la tabla de personas y alguna otra que tenga relación con la tabla calles. ¡Utilizar con precaución!

Volver al texto

22.17.6. basic Insertar una nueva calle

El comando SQL, que debe usar se ve así (puede reemplazar el nombre de la calle con uno de su elección):

insert into streets (name) values ('Low Road');

Volver al texto

22.17.7. moderate Agregar una nueva persona con relación de llave foránea

Aquí esta la sentencia SQL correcta:

insert into streets (name) values('Main Road');
insert into people (name,house_no, street_id, phone_no)
  values ('Joe Smith',55,2,'072 882 33 21');

Si se fija en la tabla de calles nuevamente (utilizando una sentencia select como antes), vera que el id de la entidad Carretera Principal es 2.

Eso es por qué podríamos solo introducir el numero 2 arriba. Aunque no estemos viendo Carretera principal escrito completamente en la entrada de arriba, la base de datos podrá estar asociada a street_id con el valor de 2.

Nota

Si ya ha añadido un nuevo objeto street, puede encontrarse con que el nuevo Main Road tiene un ID de 3 y no de 2.

Volver al texto

22.17.8. moderate Regresar Nombre de calles

Aquí esta la sentencia SQL correcta que debe usar:

select count(people.name), streets.name
from people, streets
where people.street_id=streets.id
group by streets.name;

Resultado:

count |    name
------+-------------
    1 | Low Street
    2 | High street
    1 | Main Road
(3 rows)

Nota

Se dará cuenta de que hemos prefijado nombres de campo con nombres de tablas (por ejemplo people.name y streets.name). Esto se debe hacer cada vez que el nombre de campo sea ambiguo (es decir no es único en todas las tablas de la base de datos)

Volver al texto

22.18. Results For Consultas Espaciales

22.18.1. basic Las unidades usadas en Consultas Espaciales

Las unidades usadas para el ejemplo de consulta son grados, porque el SRC que la capa esta usando es WGS84. Este es un SRC Geografico, que significa que las unidades están en grados. Un proyecto SRC, como la proyección UTM que esta en metros.

Recuerde que cuando escriba la consulta, necesita saber en que unidades esta el SRC de la capa. Esto te permitirá escribir una consulta que regrese los resultados que tu esperas.

Volver al texto

22.18.2. basic Creando un índice espacial

CREATE INDEX cities_geo_idx
  ON cities
  USING gist (the_geom);

Volver al texto

22.19. Results For Construcion de geometría

22.19.1. moderate Creando linestrings

alter table streets add column the_geom geometry;
alter table streets add constraint streets_geom_point_chk check
     (st_geometrytype(the_geom) = 'ST_LineString'::text OR the_geom IS NULL);
insert into geometry_columns values ('','public','streets','the_geom',2,4326,
     'LINESTRING');
create index streets_geo_idx
  on streets
  using gist
  (the_geom);

Volver al texto

22.19.2. moderate «Enlazando tablas»

delete from people;
alter table people add column city_id int not null references cities(id);

(capturar ciudades en QGIS)

insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
   values ('Faulty Towers',
           34,
           3,
           '072 812 31 28',
           1,
           'SRID=4326;POINT(33 33)');

insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
   values ('IP Knightly',
           32,
           1,
           '071 812 31 28',
           1,F
           'SRID=4326;POINT(32 -34)');

insert into people (name,house_no, street_id, phone_no, city_id, the_geom)
   values ('Rusty Bedsprings',
           39,
           1,
           '071 822 31 28',
           1,
           'SRID=4326;POINT(34 -34)');

Si recibe el siguiente mensaje de error:

ERROR:  insert or update on table "people" violates foreign key constraint
        "people_city_id_fkey"
DETAIL: Key (city_id)=(1) is not present in table "cities".

entonces significa que mientras experimentaba con la creación de polígonos para la tabla de ciudades, debe haber eliminado algunos de ellos y empezar de nuevo. Vea las entradas de su tabla de ciudades y use cualquier id que exista.

Volver al texto

22.20. Results For Modelo de características simples

22.20.1. moderate Llenar tablas

create table cities (id serial not null primary key,
                     name varchar(50),
                     the_geom geometry not null);
 alter table cities
 add constraint cities_geom_point_chk
 check (st_geometrytype(the_geom) = 'ST_Polygon'::text );

Volver al texto

22.20.2. moderate Llenar la tabla Geometria_Columnas

insert into geometry_columns values
      ('','public','cities','the_geom',2,4326,'POLYGON');

Volver al texto

22.20.3. hard Agregar geometría

select people.name,
       streets.name as street_name,
       st_astext(people.the_geom) as geometry
from   streets, people
where  people.street_id=streets.id;

Resultado:

     name     | street_name |   geometry
--------------+-------------+---------------
 Roger Jones  | High street |
 Sally Norman | High street |
 Jane Smith   | Main Road   |
 Joe Bloggs   | Low Street  |
 Fault Towers | Main Road   | POINT(33 -33)
(5 rows)

Como puede ver, nuestra limitación permite agregar nulos en la base de datos.

Volver al texto