{"id":621,"date":"2017-07-28T04:36:03","date_gmt":"2017-07-28T04:36:03","guid":{"rendered":"http:\/\/www.manualsqlserver.com\/?p=621"},"modified":"2020-05-20T21:17:41","modified_gmt":"2020-05-20T21:17:41","slug":"particion-vertical-de-tablas-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=621","title":{"rendered":"Partici\u00f3n Vertical de Tablas en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"220\" height=\"157\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ParticionVerticalTablaD.png\" alt=\"\" class=\"wp-image-1337\"\/><\/figure>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Partici\u00f3n vertical de Tablas<\/strong><\/h1>\n\n\n\n<p>En el art\u00edculo de <a href=\"http:\/\/www.manualsqlserver.com\/?p=141\">Tablas particionadas<\/a> se describi\u00f3 la forma de como particionar una tabla de manera horizontal, cuando se proyecta que esta tabla va a tener muchos registros.<\/p>\n\n\n\n<p>En este art\u00edculo se explica como se particiona una tabla de manera vertical, esto es b\u00e1sicamente\u00a0dividiendo la cantidad de campos que tiene la tabla en varias tablas y ubicarlas en diferentes grupos de archivos.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Con regularidad se usa para separar los campos que ocupan mucho espacio como los de tipo Image para ubicarlos en otra tabla relacionadas con claves for\u00e1neas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Pasos para crear una tabla particionada verticalmente<\/strong><\/h2>\n\n\n\n<p><strong>1. Crear una base de datos que tenga varios grupos de archivos. (Ver <a href=\"http:\/\/www.manualsqlserver.com\/?p=85\">Crear Bases de datos<\/a>)<\/strong><br><strong>Las carpetas ser\u00e1n C:\\DataBD y D:\\ImagenesBD<\/strong><\/p>\n\n\n\n<p>xp_create_subdir &#8216;C:\\DataBD&#8217;<br>go<br>xp_create_subdir &#8216;D:\\ImagenesBD&#8217;<br>go<br>Create database ParticionVertical<br>on Primary (name=Data01, Filename= &#8216;C:\\DataBD\\Data01.mdf&#8217;),<br>filegroup VENTAS (name=Data02, Filename= &#8216;C:\\DataBD\\Data02.ndf&#8217;),<br>filegroup CUENTAS (name=Data03, Filename= &#8216;D:\\ImagenesBD\\Data03.ndf&#8217;),<br>filegroup RECURSOS (name=Data04, Filename= &#8216;D:\\ImagenesBD\\Data04.ndf&#8217;)<br>LOG ON<br>(name=DataLog01, Filename= &#8216;D:\\ImagenesBD\\DataLog01.ldf&#8217;)<br>go<\/p>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p><strong>2. Crear la tabla, crearemos para el ejemplo una tabla de productos, los datos de los <\/strong><strong>productos en una tabla en el grupo VENTAS y las im\u00e1genes de los mismos en el grupo RECURSOS. (<a href=\"http:\/\/www.manualsqlserver.com\/?p=120\">Ver Crear tablas<\/a>)<\/strong><\/p>\n\n\n\n<p>use ParticionVertical<br>go<\/p>\n\n\n\n<p><strong>La tabla productos no contiene la imagen de estos.<\/strong><\/p>\n\n\n\n<p>Create table Productos (<br>ProductosCodigo nchar(8),<br>ProductosDescripcion nvarchar(50) not null,<br>ProductosPrecio numeric(9,2),<br>ProductosStock numeric(9,2),<br>ProductosEstado nchar(1),<br>constraint ProductosPK primary key (ProductosCodigo),<br>constraint ProductosPrecioCK check (ProductosPrecio&gt;=0)<br>) on VENTAS<br>go<\/p>\n\n\n\n<p><strong>3. La tabla ProductosImagen contiene la foto de cada producto, en una tabla separada en otro grupo de archivos.<\/strong><\/p>\n\n\n\n<p>Create table ProductosImagen (<br>ProductosImagenCodigo nchar(8),<br>ProductosImagenFoto Image,<br>constraint ProductosImagenPK primary key (ProductosImagenCodigo),<br>constraint ProductosImagenProductosFK Foreign key (ProductosImagenCodigo)<br>references Productos(ProductosCodigo)<br>) on RECURSOS<br>go<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Importante: <\/strong><\/h3>\n\n\n\n<p>Para conseguir que los datos de la tabla Productos se particione es necesario&nbsp;crear las tablas anteriores en diferentes grupos de archivos. Para nuestro ejemplo se cre\u00f3&nbsp;la tabla Productos en el grupo de archivos VENTAS y la tabla ProductosImagen en el grupo de archivos RECURSOS.<\/p>\n\n\n\n<p><strong>4. Insertar registros<\/strong><br><strong>El producto sin la foto en Productos, y luego la foto en ProductosImagen<\/strong>. (<a href=\"https:\/\/manualsqlserver.com\/?p=627\">Ver Insertar im\u00e1genes desde SQL Server<\/a>)<\/p>\n\n\n\n<p><strong>Teclado<\/strong><br>insert into Productos values (&#8216;T0467&#8242;,&#8217;Teclado&#8217;,45,10,&#8217;A&#8217;)<br>go<br>insert into ProductosImagen<br>select &#8216;T0467&#8217; As ProductosImagenCodigo, *<br>from OpenRowset(Bulk &#8216;D:\\Imagenes\\Teclado.jpg&#8217;, Single_Blob) As Picture<br>go<\/p>\n\n\n\n<p><strong>Mouse<\/strong><br>insert into Productos values (&#8216;T9867&#8242;,&#8217;Mouse&#8217;,185,30,&#8217;A&#8217;)<br>go<br>insert into ProductosImagen<br>select &#8216;T9867&#8217; As ProductosImagenCodigo, *<br>from OpenRowset(Bulk &#8216;D:\\Imagenes\\Mouse.jpg&#8217;, Single_Blob) As Picture<br>go<\/p>\n\n\n\n<p><strong>Monitor<\/strong><br>insert into Productos values (&#8216;T0970&#8242;,&#8217;Monitor&#8217;,385,12,&#8217;A&#8217;)<br>go<br>insert into ProductosImagen<br>select &#8216;T0970&#8217; As ProductosImagenCodigo, *<br>from OpenRowset(Bulk &#8216;D:\\Imagenes\\Monitor.jpg&#8217;, Single_Blob) As Picture<br>go<\/p>\n\n\n\n<p><strong>Si se listar los registros de ambas tablas<\/strong><br>select * from Productos<br>select * from ProductosImagen<br>go<br><strong>Se puede ver los datos de los productos en la tabla Productos y sus im\u00e1genes en la tabla ProductosImagen<\/strong><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ParticionVerticalTabla_01.png\" alt=\"\" class=\"wp-image-1335\" width=\"851\" height=\"258\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ParticionVerticalTabla_01.png 999w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ParticionVerticalTabla_01-300x91.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ParticionVerticalTabla_01-768x234.png 768w\" sizes=\"auto, (max-width: 851px) 100vw, 851px\" \/><\/figure><\/div>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n\n\n\n<p><strong>5. Para ver los datos se crear\u00e1 una vista (<a href=\"http:\/\/www.manualsqlserver.com\/?p=310\">Ver Vistas<\/a>)<\/strong><\/p>\n\n\n\n<p>Create view vistaProductos<br>As<br>Select P.ProductosCodigo, P.ProductosDescripcion,<br>P.ProductosPrecio,P.ProductosStock, P.ProductosEstado,<br>I.ProductosImagenFoto<br>from Productos As P<br>join ProductosImagen As I on P.ProductosCodigo = I.ProductosImagenCodigo<br>go<\/p>\n\n\n\n<p><strong>Para listar los Productos y las im\u00e1genes de los mismos se utilizar\u00e1 la vista<\/strong><br>select * from vistaProductos<br>go<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ParticionVerticalTabla_02-1024x139.png\" alt=\"\" class=\"wp-image-1336\" width=\"816\" height=\"110\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ParticionVerticalTabla_02-1024x139.png 1024w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ParticionVerticalTabla_02-300x41.png 300w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ParticionVerticalTabla_02-768x104.png 768w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_ParticionVerticalTabla_02.png 1162w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Recomendaci\u00f3n<\/strong><\/h3>\n\n\n\n<p class=\"has-background has-very-light-gray-background-color\">Cuando cree su procedimiento almacenado que guarda el registro en la tabla Productos, debe incluir la instrucci\u00f3n para insertar el mismo registro en la tabla ProductosImagen. Se puede usar Trigger. (<a href=\"http:\/\/www.manualsqlserver.com\/?p=385\">Ver Triggers<\/a>)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Partici\u00f3n vertical de Tablas En el art\u00edculo de Tablas particionadas se describi\u00f3 la forma de como particionar una tabla de manera horizontal, cuando se proyecta que esta tabla va a tener muchos registros. En este art\u00edculo se explica como se particiona una tabla de manera vertical, esto es b\u00e1sicamente\u00a0dividiendo la cantidad de campos que tiene &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=621\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1337,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,4,5,9],"tags":[20,22,28,40,46,47,57,64],"class_list":["post-621","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-crearbd","category-consultasdedatos","category-esquemastablas","category-registros-vistas","tag-create-table","tag-create-view","tag-esquemas","tag-join","tag-particion","tag-permisos","tag-tablas","tag-vistas","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=621"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/621\/revisions"}],"predecessor-version":[{"id":1339,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/621\/revisions\/1339"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1337"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}