Logo rortegag

SQL Server 2016 VS MySQL

SQL Server 2016 VS MySQL

1. Introducción

1.1. Presentación

En esta elaboración de mi proyecto trato de averiguar y saber si ofrece las mismas ventajas el software comercial con software gratuito y/o libre. En este proyecto he elaborado un servidor de base de datos con el software SQL Server 2016 de Microsoft en un sistema operativo Windows Server 2016. Trataré, sobre todo, lo fundamental de lo que aprendido sobre este curso con MySQL en sistemas de Microsoft. También pondré otros servicios en el servidor como IIS (servidor web), DNS y Active Directory.

1.2. Objetivos

Mis objetivos sobre este proyecto es averiguar las ventajas y desventajas sobre un software comercial, como en este caso SQL Server 2016 respecto a MySQL. También ver qué diferencias hay entre usar un Sistema de Gestor de Base de Datos distinto a MySQL, tanto al visualizar y crear tablas, funciones, procedimientos, cursores, disparadores, etc… También veremos diferencias entre usar PHP con SQL Server respecto a MySQL.

1.3. Motivaciones

Mis motivaciones en este proyecto es aprender cosas nuevas y he elegido Windows Server en modo Core porque, se supone, que será el futuro de Windows Server, no tendrá una GUI y me gustaría aprender PowerShell, si es de verdad un buen sistema de comandos y de scripts, ya que está orientado a objetos, muy diferente al modo comando del CMD, que se va a reemplazar por PowerShell.

Respecto a SQL Server por que ofrece algunas cosas útiles que llevan otro gestor de base de datos y ver si es más fácil aprender con SQL Server que con MySQL. También por dejar de lado, de momento, usar software libre para aprender cosas y en entornos empresariales de trabajo usan software comercial que software libre.

2. Planificación

La planificación del proyecto consistirá en un servidor con Windows Server 2016 sin GUI que contendrá unos servicios de DNS, Active Directory, IIS (servicio web) y SQL Server 2016 (servidor de base de datos).

Después estarán tres clientes Windows 10, que iniciarán con sus usuarios de Active Directory y podrán utilizar la herramienta SQLCMD para conectarse con SQL Server.

En la base de datos de SQL Server contendrá solamente una base de datos. Se trata de una inmobiliaria.

Se trata del proyecto de IAW de PHP que hice anteriormente. Aquí mostraré el uso de PHP para que se conecte a SQL Server y mostrar, actualizar, crear y borrar datos de la base de datos de SQL Server y ver cuantas diferencias hay entre MySQL. También contendrá funciones, procedimientos, cursores… creados anteriormente en el proyecto ASGBD y ver las diferencias.

3. Requisitos previos

Los requisitos previos que debemos tener es el disco de instalación de Windows Server 2016 y el disco de instalación de SQL Server 2016 para el servidor, el disco de instalación de Windows 10 Pro para los clientes, in contar que se realizará en máquinas virtuales VMware.

4. Plan del contenido

Instalar Windows Server 2016 Standard sin entorno gráfico e instalar servicios básicos, como Active Directory, DNS, Servicio Web, etc…

5. Diagrama de la base de datos

Aquí está reflejado el dibujo de la base de datos y su modelo relacional. Se explicará más delante de que consiste la base de datos.

Diagrama de la base de datos

6. Servidor Windows Server 2016

Dicho antes, el servidor será Windows sin entorno gráfico, administrado con la consola de comandos CMD y con PowerShell. Se verá la instalación, la configuración dada para este servidor y la configuración de las copias de seguridad.

6.1. Instalación de Windows Server 2016

Instalación de Windows Server 2016

Seleccionamos el Idioma español y método de teclado de entrado en español.

Instalación de Windows Server 2016

Seleccionamos la opción Windows Server 2016 Standard, que es la opción sin entorno de escritorio. No necesitamos el Datacenter ya que no vamos a virtualizar nada en este proyecto.

Instalación de Windows Server 2016

Creamos una partición solamente para el sistema operativo. Después les agregaremos discos para temas de copia de seguridad.

Instalación de Windows Server 2016

Una vez instalado el sistema, se reiniciará y veremos una ventana tipo cmd. Nos pedirá agregar una contraseña al usuario Administrador, le damos en Aceptar.

Instalación de Windows Server 2016

Y tenemos el Windows Server 2016 Core iniciado. Siempre se iniciará con una ventana de cmd.

Instalación de Windows Server 2016

Para iniciar Windows PowerShell podemos iniciar de tres formas diferentes.

  • Escribiendo powershell dentro del cmd para iniciar PowerShell dentro de la misma consola cmd.
  • Escribiendo start powershell dentro del cmd para iniciar PowerShell en una ventana nueva.
  • Abriendo el Administrador de tareas con Ctrl + Shift + Esc. Archivo  Nueva Tarea y escribir powershell.

6.2. Configuración de Windows Server 2016

Creación de un Minshell para Windows server 2016 Core (Opcional).

Una de las cosas que tenía Windows Server 2012 R2 era que podías abrir el explorador de archivos, el Internet Explorer y el Administrador del servidor estando en modo Core. Ahora esto se ha eliminado, cosa que no han gustado a algunos administradores de sistemas, crearé yo mismo mi propio Minshell.

Configuración de Windows Server 2016

Nos desplazamos a la raíz de C: y creamos una Carpeta llamada Apps. Creamos una carpeta llamada terminal Server que guardará la aplicación de escritorio remoto.

Configuración de Windows Server 2016

Vamos a montar un disco que tiene Windows Server 2016 con entorno gráfico en nuestro Windows Server Core. Para ello usamos diskpart. Listamos los discos con list disk y listamos los volúmenes con list volume. Vemos que se ha montado automáticamente la partición E: con 100 GB.

Configuración de Windows Server 2016

Salimos del diskpart y nos movemos a la unidad de disco E:\Windows\system32. Copiamos la aplicación mstsc.exe a la unidad C: Para hacerlo funcionar necesitamos más archivos. Usamos el comando robocopy para copiar más archivos a una partición diferente. Copiamos los archivos que indican en la imagen.

Configuración de Windows Server 2016

Ahora dentro de la carpeta Terminal Server creamos la carpeta es-ES y nos movemos en ella. Ahora nos movemos a la carpeta E:\Windows\SysWOW64\es-ES.

Configuración de Windows Server 2016

Usamos otra vez el comando robocopy para copiar los últimos archivos.

Configuración de Windows Server 2016

Probamos que la aplicación mstsc que la conexión a Escritorio remoto abre correctamente.

Instalación de Mozilla Firefox

Ahora procedemos a instalar Mozilla Firefox. ¿Funcionará?

Instalación de Mozilla Firefox

Vemos que sí

Instalación de FreeCommander

Vamos a descargarnos el programa FreeComander desde la página www.freecommander.com. Nos descargamos la versión Portable.

Instalación de FreeCommander

Cuando ejecutemos el instalador, al darle a examinar no se podrá ver las carpetas, tendremos que poner la ruta nosotros mismos a mano.

Instalación de FreeCommander

Cuando se haya instalado, vemos que al ejecutar el programa tendremos un explorador de archivos con bastantes funciones.

Configuración inicial de Windows Server 2016

Configuración de Windows Server 2016

Vamos a cambiar el nombre del equipo al servidor. Para ello hay un comando/script llamado sconfig. Cuando lo ejecutemos saldrá bastantes opciones de configuración. Para cambiar el nombre, elegimos la opción 2 y después el nombre del equipo que queremos. Nos pedirá reiniciar para cambiar el nombre del equipo.

Configuración de Windows Server 2016

Cuando se reinicie, vamos al sconfig otra vez y habilitamos el acceso remoto al servidor. Elegimos la opción 7 y después la opción 1, para que se usen solamente el programa mstsc.exe al conectarse al servidor remotamente y no con herramientas de terceros.

Configuración de Windows Server 2016

Vamos a configurar la tarjeta de red. Elegimos la opción 8. Saldrá las tarjetas de red que tenemos habilitadas. Elegimos la 1 ya que no hay más. Después nos saldrá la información de esa tarjeta de red, como la dirección IP, la máscara de subred, el DNS… Seleccionamos la opción 1 que es de establecer una dirección IP y luego la opción e para asignar una dirección IP estática.

Configuración de Windows Server 2016

Después le damos la opción 2 para poner la dirección DNS primario igual a nuestra dirección IP, ya que este servidor tendrá DNS.

Configuración de Windows Update

Configuración de Windows Server 2016

Elegimos la opcion 5 para configurar Windows Update. Podemos ponerlo en automáticas, solo descarga o manual.

Configuración de Windows Server 2016

Si de alguna manera la tenemos en Manual, para descargar e instalar las actualizaciones de Windows, elegimos la opción 6. Saldrá una ventana.

Configuración de Windows Server 2016

Seleccionamos la opción r, solamente las recomendadas y cuando termine de buscar actualizaciones seleccionamos la opción a para instalar todas las actualizaciones. Si seleccionamos la opción a para buscar todas las actualizaciones, buscará también actualizaciones para otros productos de Microsoft y drivers para el servidor.

Instalación y configuración de Active Directory y DNS.

Configuración de Windows Server 2016

En PowerShell usamos el comando Get-WindowsFeature para instalar servicios y características de Windows Server 2016. Queremos instalar los Servicios de dominio de Active Directory (Ad-Domain-Services) y DNS (DNS).

Configuración de Windows Server 2016

Para instalarlos debemos usar el comando Install-WindowsFeature [Name] y opcional, pero recomendable, los parámetros -IncludeManagementTools (para incluir las herramientas de administración de ese servicio) y -IncludeAllSubFeature (para incluir todas las características asociadas de ese servicio que vamos a instalar).

Configuración de Windows Server 2016

Importamos el módulo de configuración para configurar el servicio de Active Directory (Import-Module ADDSDeployment). Es aconsejable poner todo lo que pone en este comando.

Install-ADDSForest

-CreateDnsDelegation valor $true para que cree una zona DNS de delegación para Active Directory o $false para que no cree una zona de delegación para Active Directory.

-DatabasePath “C:\Windows\NTDS”. Es aconsejable poner la ruta por defecto.

-DomainMode “Win2012R2”. Los valores pueden ser los siguientes:

  • Win2003 o 2. Modo de Active Directory para compatibilidad desde Windows XP o superior.
  • Win2008 o 3. Modo de Active Directory para compatibilidad desde Windows Vista o superior.
  • Win2008R2 o 4. Modo de Active Directory para compatibilidad desde Windows 7 o superior.
  • Win2012 o 5. Modo de Active Directory para compatibilidad desde Windows 8 o superior.
  • Win2012R2 o 6. Modo de Active Directory para compatibilidad desde Windows 8.1 o superior.
  • Win2016 o 7. Modo de Active Directory para compatibilidad desde Windows 10 o superior.

-DomainName “sql_raul.local”. Nombre del dominio que queremos.

-DomainNetBiosName -> “SQL_RAUL”. Nombre de NetBIOS.

-ForestMode -> “Wn2012R2”. Los valores pueden ser los siguientes:

  • Win2003 o 2. Modo de Active Directory para compatibilidad desde Windows XP o superior.
  • Win2008 o 3. Modo de Active Directory para compatibilidad desde Windows Vista o superior.
  • Win2008R2 o 4. Modo de Active Directory para compatibilidad desde Windows 7 o superior.
  • Win2012 o 5. Modo de Active Directory para compatibilidad desde Windows 8 o superior.
  • Win2012R2 o 6. Modo de Active Directory para compatibilidad desde Windows 8.1 o superior.
  • Win2016 o 7. Modo de Active Directory para compatibilidad desde Windows 10 o superior.

ATENCIÓN

Si por ejemplo el ForestMode es Win2008R2, DomainMode no puede tener un valor superior al ForestMode, tendrá que ser igual o menor valor.

-LogPath “C:\Windows\NTDS”. Es aconsejable poner la ruta por defecto.

-NoReebotOnCompletion $false. $true para reiniciar el servidor al completar de configurar el servicio de Active Directory. $false hará lo contrario, no reiniciarse al completar la configuración de Active Directory.

-SysvolPath “C:\Windows\SYSVOL”. Es aconsejable poner la ruta por defecto.

-Force $true fuerza para que se complete la configuración, aunque haya advertencias y errores, pero no si hay errores críticos durante se configura el servicio de Active Directory. $false hará lo contrario, no completará la configuración si hay errores, pero mostrará indicándole al usuario las advertencias que haya en la configuración del servicio de Active Directory.

Terminado de explicarlo, ejecutamos el comando

Configuración de Windows Server 2016

Ponemos la contraseña para el servicio de Active Directory.

Configuración de Windows Server 2016

Ha mostrado unas advertencias y luego ha dado un error. ¿Por qué ha sucedido esto? Si hemos instalado el servidor DNS antes de configurar el servicio de Active Directory, dará este error por qué no ha creado una zona principal para el dominio (seguramente la zona inversa del dominio). Podemos hacer donde pone -CreateDnsDelegation:$true, lo ponemos a $false para que no cree la delegación y la crearemos a mano.

Configuración de Windows Server 2016

Si no hemos instalado DNS antes de instalar los servicios de Active Directory, en el comando podemos agregar el siguiente parámetro -InstallDNS:$true para que instale el servidor DNS.

Configuración de Windows Server 2016

Cuando se termine de instalar y configurar Active Directory, es recomendable reiniciar el servidor para autenticarnos con el dominio del Active Directory.

Configuración de Windows Server 2016

En los equipos Windows 10 que van a estar unidos, los unimos al Active Directory yendo a Panel de control Sistema Cambiar configuración Cambiar nombre. Cambiamos el nombre del equipo para identificarlo bien y en dominio ponemos el nombre del dominio que hemos puesto. Pedirá el nombre del usuario que tenga permisos de administrador de ese dominio y reiniciamos ese equipo con Windows 10 para iniciar sesión con los usuarios del Active Directory.

Configuración de Windows Server 2016

Para ver si de verdad se ha unido podemos verlo desde el servidor DNS con el comando cmdlet Get-DnsServerResourceRecord -ZoneName [Nombre del Dominio].

Si queremos verlo desde Active Directory y con más información usamos el comando cmdlet Get-ADComputer -Identity [Nombre del host].

Configuración de Windows Server 2016

Para crear nuevos usuarios de Active Directory, usamos el comando cmdlet:

New-ADUser

-Name “Raul”. Nombre del usuario.

-Surname “Ortega”. Apellidos del usuario.

-SamAccountName “ROG”. Nombre del usuario para iniciar sesión.

-DisplayName “Raul Ortega”. Nombre que saldrá como nombre del usuario.

-GivenName “Raul”. Que sea igual que el nombre real del usuario.

-UserPrincipalName “ROG”. Nombre principal del usuario.

Una vez hecho esto, debemos ponerle una contraseña. Usamos el comando cmdlet Set-ADAccountPasswrod [Nombre del usuario SamAccountName].

Una vez puesta, debemos habilitar el usuario con el comando cmdlet Set-ADUser [Nombre del usuario SamAccuntName] -Enabled $true.

Configuración de Windows Server 2016

Ingresamos con el usuario ROG si accede a un equipo unido al dominio.

Configuración de Windows Server 2016

Ingresamos con el usuario AEG si accede a un equipo unido al dominio.

Instalación de IIS Server y Powershell Administration Web Server

Configuración de Windows Server 2016

Instalamos IIS con el comando cmdlet Install-WindowsFeature Web-Server.

Configuración de Windows Server 2016

Instalamos PowershellWebAccess con el comando cmdlet Install-WindowsFeature WindowsPowershellWebAccess, incluyendo los –IncludeManagementTools y –IncludeAllSubFeature

Configuración de Windows Server 2016

Instalamos un certificado de prueba, pues para entrar en PowerShell Web Access se necesita que esté cifrado. Usamos el comando Install-PswaWebApplication –UseTestCertificate.

Creamos una regla para el usuario Administrador pueda acceder por la interfaz web de PowerShell.

Usamos el comando:

Add-PswaAuthorizationRule

-UserName “sql_raul.local\Administrador” nombre de usuario que permitimos el acceso a la interfaz web

-ComputerName “SQLSERVER.sql_raul.local” nombre del equipo al que podrá acceder el usuario por la interfaz web.

-ConfigurationName Micrososft.PowerShell Esto no se debe cambiar.

Configuración de Windows Server 2016

Ahora un paso importante. Debemos de acceder al registro bien por regedit.exe o por PowerShell. Accedemos a la carpeta del registro >HKEY_LOCAL_MACHINE (HLM:). Vamos ahora a la ruta HKLM\SOFTWARE\Microsoft. Si no está la carpeta WebManagement, la creamos. Dentro de la carpeta WebManagement debe estar la carpeta Server, sino, la creamos. La ruta debe ser la siguiente:

HKLM:\SOFTWARE\Microsoft\WebManagement\Server

Dentro de esa ruta creamos una clave de registro con el comando cmdlet Set-ItemProperty con el parámentro –Name y el nombre EnableRemoteManagement y el parámetro –Value en 1.

Indicamos la ruta que se guardará esa clave, la ruta dicha anteriormente.

Configuración de Windows Server 2016

Vamos a un cliente Windows 10 y podemos ir al servicio Windows PowerShell Web Access en la dirección URL sqlserver/pswa si estamos en local.

Escribimos el nombre del usuario (sql_raul.local\Administrador), la contraseña, tipo de conexión (Nombre de equipo) y el nombre del equipo (SQLSERVER).

Configuración de Windows Server 2016

Iniciamos sesión y vemos que tenemos PowerShell a través del navegador Web.

6.3. Monitorización de Windows Server 2016

La monitorización en Windows Server 2016 modo Core, podemos abrir el administrador de tareas con los atajos del teclado Ctrl+Shift+Esc.

Monitorización de Windows Server 2016

Podemos ver los procesos que más consumen en el servidor.

Monitorización de Windows Server 2016

Desde la pestaña Servicios, podemos ver los servicios del sistema y de SQL Server. Si el proceso MSSQLSERVER está detenido al iniciar, clic derecho y lo iniciamos. Podemos para el proceso SQLTelemetry ya que sirve para telemetría.

Monitorización de Windows Server 2016

7. Servidor SQL Server 2016

7.1. Instalación de SQL Server 2016 y configuración dentro de la instalación

Antes de la instalación, he instalado SQL Server en modo gráfico para sacar el fichero de configuración de instalación para el modo comando y tenerlo configurado cuando se instale.

Configuración de SQL Server 2016

Ejecutamos el setup.exe del CD de SQL Server 2016. Para ejecutarlo tendremos que ejecutar el setup.exe con los parámetros /QS /ConfigurationFile=”nombre del archivo de configuración de la instalación” y /IAcceptSQLServerLicenseTerms para aceptar los términos de licencia de SQL Server.

El archivo de configuración contiene lo siguiente (pondré los más importantes):

  • ACTION=INSTALL. Especifica un flujo de trabajo de instalación, como INSTALL, UNINSTALL o UPGRADE. Es un parámetro necesario. INSTALL para instalar.
  • ENU="False". Use el parámetro /ENU para instalar la versión en inglés de SQL Server en el sistema operativo Windows traducido. Ponemos False para instalarlo con el idioma que este puesto Windows.
  • FEATURES=SQLENGINE,FULLTEXT,CONN. Especifica las características que se van a instalar, desinstalar o actualizar. La lista de las características de nivel superior incluye SQL, AS, RS, IS, MDS y Herramientas. La característica SQL instalará el motor de base de datos, la replicación, el texto completo y el servidor de Data Quality Services (DQS). La característica Herramientas instalará los componentes compartidos. Solamente vamos a necesitar SQLENGINE (motor de base de datos), FULLTEXT (Extracciones de texto completo y semánticas de búsqueda) y CONN (conectividad con herramientas de cliente).
  • INSTANCENAME="MSSQLSERVER". Especifique una instancia predeterminada o con nombre. MSSQLSERVER y SQLExpress son las instancias predeterminadas de las ediciones que no son Express y de las Express, respectivamente. Se requiere este parámetro al instalar el motor de base de datos de SQL Server (SQL), Analysis Services (AS) o Reporting Services (RS). Por defecto es MSSQLSERVER.
  • INSTANCEID="MSSQLSERVER". Especifique el identificador de instancia de las características de SQL Server que ha indicado. Las estructuras de directorios y del Registro, así como los nombres de los servicios SQL Server incorporarán el identificador de instancia de SQL Server. Por defecto tiene que ser igual que el parámetro INSTANCENAME.
  • AGTSVCACCOUNT="NT Service\SQLSERVERAGENT". Nombre de cuenta del Agente. Por defecto NT Service\SQLSERVERAGENT.
  • AGTSVCSTARTUPTYPE="Automatic". Iniciar servicio automáticamente después de la instalación. Ponemos en automático.
  • SQLSVCSTARTUPTYPE="Automatic". Tipo de inicio para el servicio SQL Server. Ponemos en automático.
  • SQLSVCACCOUNT="NT Service\MSSQLSERVER". Cuenta para el servicio de SQL Server: Dominio\Usuario o cuenta de sistema. Por defecto usaremos uno del sistema NT Service\MSSQLSERVER.
  • SQLSYSADMINACCOUNTS="SQL_RAUL\Administrador". Cuentas de Windows que se suministran como administradores del sistema de SQL Server. La cuenta de usuario del Administrador del servidor.
  • SECURITYMODE="SQL". Autenticación de Windows predeterminada. Use "SQL" para el modo mixto de autenticación de Windows. Usamos SQL para habilitar el modo mixto.
  • SAPWD="Inves-1234". Contraseña para el usuario administrador de SQL (sa). Ponemos la contraseña que contendrá el usuario sa de SQL Server.
  • TCPENABLED="1". Especifique 0 para deshabilitar el protocolo TCP/IP, o 1 para habilitarlo. Usamos el 1 para habilitar TCP.
  • BROWSERSVCSTARTUPTYPE="Automatic". Tipo de inicio para el servicio SQL Server Browser. Ponemos en automático.
Configuración de SQL Server 2016

Vemos que se prepara para instalar. Tardará con las características puestas, unos 10 – 15 minutos, dependiendo de la características del servidor y si hemos puesto más características para SQL Server.

Configuración de SQL Server 2016

Una vez instalado usamos en comando sqlcmd para comprobar que funciona.

7.2. Código de base de datos

Vamos a ver las diferencias entre SQL Server y MySQL de la base de datos de la inmobiliaria. La base de datos de la inmobiliaria consiste en:

Que permita guardar los administradores que administran el sitio de la inmobiliaria, los empleados puedan poner en venta o en alquiler los inmuebles y los clientes puedan acceder a esa venta de inmuebles.

Lo inmuebles tiene distintos tipos: Casas, Pisos, Locales y Garajes. Los garajes pueden estar o no unidos a las casas o pisos. Los garajes pueden estar solos independientemente sin las casas y los pisos para ponerse en venta o alquiler. Los locales no pueden tener garajes puestos (la inmobiliaria venden o alquilan los locales con garaje propio). Los pisos se diferencian por dos atributos, planta y puerta de ese piso.

Una inmobiliaria puede tener más de dos imágenes puestas en el mismo inmueble.

Los empleados serán los agentes de los alquileres de esos inmuebles y ellos contenderán cuantos pagos recibe ese mismo alquiler.

Las compras guardaran el valor y la fecha cuando se creó ese inmueble en venta.

Dicho esto, veremos las diferencias del código entre SQL Server y MySQL.

SQL Server

Para ver las base de datos en SQL Server.

Ver bases de datos en SQL Server

Para ver las tablas de la inmobiliaria en SQL Server.

Ver tablas en SQL Server

MySQL

Para ver las base de datos en MySQL.

Ver bases de datos en MySQL

Para ver las tablas de la inmobiliaria en MySQL.

Ver tablas en MySQL

7.2.1. Tablas

SQL Server

Creación de tablas en SQL Server Creación de tablas en SQL Server Creación de tablas en SQL Server Creación de tablas en SQL Server Creación de tablas en SQL Server

MySQL

Creación de tablas en MySQL Creación de tablas en MySQL Creación de tablas en MySQL Creación de tablas en MySQL

Para que los IDs se autoincrementen, se usa la función IDENTITY(1,1) el primer valor debe ser 1, para que empiece por el 1 y el segundo valor lo que se va a incrementar, si es 1 pues sería 1,2,3,4… si es 2 pues 1,3,5,7,9… En SQL Server no se puede poner un ancho de columna para los valores INT, en MySQL sí.

7.2.2. Usuarios

SQL Server

Creación de usuarios de SQL Server

MySQL

Creación de usuarios de MySQL

Para crear usuarios, se utiliza el CREATE LOGIN “nombre usuario” y si queremos añadir contraseña ponemos a continuación WITH PASSWORD = “contraseña”.

En MySQL se pude utilizar CREATE USER para crear un usuario o con el propio GRANT puede crear el usuario si ponemos después IDENTIFIED BY “contraseña” para añadirle la contraseña.

7.2.3. Procedimientos

SQL Server

Procedimiento impuesto_pago

Procedimientos en SQL Server

Procedimiento impuesto_compra

Procedimientos en SQL Server

MySQL

rocedimiento impuesto_pago

Procedimientos en MySQL

Procedimiento impuesto_compra

Procedimientos en MySQL

7.2.4. Funciones

SQL Server

Función sumatodopagos

Funciones en SQL Server

Función sumatodocompras

Funciones en SQL Server

Función sumatodo

Funciones en SQL Server

MySQL

Función sumatodopagos

Funciones en MySQL

Función sumatodocompras

Funciones en MySQL

Función sumatodo

Funciones en MySQL

7.2.5. Cursores

SQL Server

Cursor para ver el alquiler que más paga en casas

Cursores en SQL Server

Cursor para ver el alquiler que más paga en pisos

Cursores en SQL Server

Cursor para ver el alquiler que más paga en locales

Cursores en SQL Server

Cursor para ver el alquiler que más paga en garajes

Cursores en SQL Server

MySQL

Cursor para ver el alquiler que más paga en casas

Cursores en MySQL

Cursor para ver el alquiler que más paga en pisos

Cursores en MySQL

Cursor para ver el alquiler que más paga en locales

Cursores en MySQL

Cursor para ver el alquiler que más paga en garajes

Cursores en MySQL

7.3. PHP en SQL Server

Como primer paso, vamos a explicar de qué va la página web para la inmobiliaria, después veremos cómo instalar la versión PHP 7 en Windows Server 2016 con IIS 10.0 y el Driver PHP para SQL Server y por último las diferencias entre SQL Server y MySQL con PHP.

Explicación de la página web.

La página index es esta de aquí.

Página principal de InmoAzteca

Tiene Inicio que va a la página de inicio (index.php), Inicia sesión (iniciar_sesion.php) para iniciar sesión con los usuarios de administración, empleados y clientes y Registrate (registro.php) para que un cliente se registre en la página. Vamos a ver la página de registro.

Registro en InmoAzteca

En este registro, estos datos se guardarán en la tabla clientes. El registro se valida con Javascript.

Registro en InmoAzteca

Cuando se registre, puede iniciar sesión.

Inicio de sesión en InmoAzteca

Se introduce el usuario y contraseña. Como está dentro de un <form> que method POST, cuando le demos a iniciar sesión, comprobará el usuario en un archivo llamado comprobarsesion.php

Como hay tres niveles de usuarios, que están separados en distintas tablas, comprobará el usuario y contraseña introducidos en esas tres tablas. Si el usuario y contraseña no sale ningún resultado de esas tres consultas como se muestra en el archivo, mostrará que usuario y/o contraseña son incorrectos.

Usuario o contrasña incorrectos en InmoAzteca

Sitio del administrador

Página principal del administrador de InmoAzteca

El administrador del sitio podrá:

  • Empleados
    • Ver empleados
    • Crear empleados
    • Modificar empleados
    • Borrar empleados
    • Cambiar contraseña a los empleados
  • Clientes
    • Ver clientes
    • Crear clientes
    • Modificar clientes
    • Borrar clientes
    • Cambiar contraseña a los clientes

Ver empleados (empleados.php)

Página de ver empleados de InmoAzteca

Una página que muestra la tabla empleados.

Crear empleados (crear_empleado.php)

Un formulario para ingresar datos del nuevo empleado. El formulario es casi idéntico que al de registro del cliente. Se valida con javascript e ingresa los datos en la tabla empleados.

Página de empleado creado de InmoAzteca

Modificar empleados (modificar_empleado.php)

Selecciona el empleado y dar en modificar.

Página de modificación de los empleados de InmoAzteca

Cambiamos los valores que queremos cambiar. El ID se muestra, pero no se puede editar. Damos en modificar.

Página de modificación de datos del empleado de InmoAzteca

El archivo mod_empleados.php es el encargado de actualizar el registro en la tabla empleados. Vemos que lo ha modificado

Página de modificación de los empleados de InmoAzteca

Borrar empleados (borrar_empleado.php)

Página de eliminación de datos del empleado de InmoAzteca

Seleccionamos el empleado que queremos borrar. El archivo bor_emp.php es el encargado de borrar el empleado seleccionado.

Página de eliminación de datos satisfactoriamente del empleado de InmoAzteca

Cambiar contraseñas (cambiar_contra_empleado.php)

Página de cambiar contraseña del empleado de InmoAzteca

Seleccionamos el empleado que queremos cambiar la contraseña e introducimos la nueva contraseña. El archivo pass_emp.php es el encargado de cambiar la contraseña del empleado.

Cerrar sesión (cerrar_sesion.php)

Fichero de cierre de sesión

Iniciamos session_start() y borramos las variables de sesión de administración y el de seguridad. Y lo envío a la página principal.

Para clientes es lo mismo que los empleados, sigue el mismo metodo, pero los archivos .php son todos terminados en cliente/s.

Ficheros del sitio web de InmoAzteca

Sitio del Empleado

Página principal del empleado de InmoAzteca

En el sitio del empleado, podrá hacer:

  • Casas
    • Ver las casas
    • Crear casas
    • Modificar casas
    • Borrar casas
  • Pisos
    • Ver los pisos
    • Crear pisos
    • Modificar pisos
    • Borrar pisos
  • Locales
    • Ver los locales
    • Crear locales
    • Modificar locales
    • Borrar locales
  • Garajes
    • Ver los garajes
    • Crear garajes
    • Modificar garajes
    • Borrar garajes

Cuando una casa, piso, local o garaje, podrán hacer:

  • Añadir imágenes a esos inmuebles.
  • Poner en venta el inmueble o poner en alquiler el inmueble.
  • Para los garajes, pueden ponerse en venta o alquiler, pero no se podrá poner en venta o en alquiler si es un garaje para una casa o piso.

Ver inmuebles (casas.php, pisos.php, locales.php, garajes.php)

Solamente es una tabla que muestra la primera imagen del inmueble y sus datos de la tabla casas, pisos, locales, garajes.

Casas

Página de casas de InmoAzteca

Pisos

Página de pisos de InmoAzteca

Locales

Página de locales de InmoAzteca

Garajes

Página de
            garajes de InmoAzteca>
            <p class= Crear inmuebles (crear_casa.php, crear_piso.php, crear_local.php, crear_garaje.php)

Un formulario para introducir los datos del nuevo inmueble. Las casas, pisos, locales y garajes, pueden tener diferentes tipos de datos.

Página de creación de casas de InmoAzteca

Cuando se introduce los datos, saldrá otro formulario para subir las imágenes del inmueble. Se da ha enviar, dirá que el inmueble está creado y pedirá si queremos ponerlo en venta o en alquiler.

Si queremos ponerlo en venta pondremos el valor del inmueble. Para alquileres se pondrá automáticamente en alquiler.

Los archivos compra_*.php Son los encargados de poner en venta el inmueble.

Los archivos alquiler_*.php Son los encargados de poner en alquiler el inmueble.

Las subidas de imágenes lo hacen los archivos subir_imagen_*.php

Para garajes es distinto, tendremos en vez de dos opciones (En venta o alquiler) tendremos (En venta o alquiler o unir el garaje a una casa o piso). Los archivos que hacen eso son agregar_garaje_casa.php y agregar_garaje_piso.php.

Páginade garaje creado de InmoAzteca

Modificar inmuebles (modificar_casas.php, modificar_pisos.php, modificar_locales.php, modificar_garajes.php)

Hace la misma operación como el de modificar los empleados pero con los inmuebles.

Página de modificación de casas de InmoAzteca Página de modificación de casas de InmoAzteca

Los archivos que hacen actualizar los datos de los inmuebles son mod_casa.php, mod_piso.php, mod_local.php, mod_garaje.php.

Borrar inmueble (borrar_casa.php, borrar_piso.php, borrar_local.php, borrar_garaje.php)

Estos archivos muestran los inmuebles y un boto de borrar. Se puede seleccionar más de uno para borrar.

Cuando le demos a borrar, Se borrará ese inmueble. No pasa nada por las tablas azteca.compras_*, azteca.alquiler_* y azteca.imagen_* ya que están unidas con una clave foránea que se actualiza cuando se borra o se actualiza la tabla principal, haciendo que estas se borren o se actualicen automáticamente.

Los archivos que borran los inmuebles son bc.php, bp.php, bl.php y bg.php.

Todos los archivos que lo hacen posible.

Ficheros del sitio web del empleado de InmoAzteca

Sitio del cliente

El cliente cuando inicie sesión, podrá ver las casas con garaje incluido en venta y en alquiler, casas sin garaje incluido en venta y en alquiler, pisos con garaje incluido en venta y en alquiler, pisos sin garaje incluido en venta y en alquiler, locales en venta y en alquiler y garajes en venta y en alquiler.

Archivos que lo hacen posible.

Ficheros del sitio web del cliente de InmoAzteca

Ejemplos:

Ejemplo de página de una casa de InmoAzteca Ejemplo de página de un piso de InmoAzteca Ejemplo de página de un garaje de InmoAzteca

En la carpeta js, se guardar los javascripts de las validaciones de los formularios.

Ficheros JavaScript de InmoAzteca

En la carpeta conexión, se encuentra el fichero conexión.php que hace conectarse a la base de datos. En la carpeta css se guardan los estilos de la página de Azteca.

Ficheros CSS de InmoAzteca

Instalación de PHP 7 en Windows Server 2016 y el driver PHP para SQL Server

Instalación de PHP7 en Windows Server 2016

Instalamos el componente CGI, es necesario para que PHP funcione en IIS.

Instalación de PHP7 en Windows Server 2016

Descargamos la herramienta Instalador de plataforma web 5.0 https://www.microsoft.com/web/downloads/platform.aspx para descargar el PHP 7.0.15 (x64). Importante que sea 64 bits porque SQL Server está solamente en 64 bits.

Instalación de PHP7 en Windows Server 2016

Si falla la instalación de PHP 7.0.15 sin IIS Express, instalar el de IIS Express. Descargamos el Driver de PHP para SQL Server https://www.microsoft.com/en-us/download/details.aspx?id=20098. Descargamos el SQLSRV40.EXE para PHP 7.

Necesitaremos solo estos dos archivos.

Instalación de PHP7 en Windows Server 2016

Lo dejamos en la carpeta php/extensions que estará en la carpeta C:\Archivos de Programa\IIS express y editamos el archivo php.ini.

Instalación de PHP7 en Windows Server 2016

Añadimos los .dll de los drivers PHP para SQL Server. Probamos con nuestra página web de Azteca, ya que esta en .php, para ver si se muestra correctamente.

Instalación de PHP7 en Windows Server 2016

Diferencias de código entre SQL Server y MySQL en PHP

En este documento pondré las que más se diferencias, hay procedimientos iguales como en otros archivos.

Vamos a empezar por la conexión con la base de datos. El archivo es conexion/conexión.php

SQL Server

Diferencia de código PHP en SQL Server

MySQL

Diferencia de código PHP en MySQL

Registro del cliente (registro.php)

SQL Server

Diferencia de código PHP en SQL Server

MySQL

Diferencia de código PHP en MySQL

No cambia mucho, solamente en vez de ser mysqli_query es sqlsrv_query. Pero en la consulta para cifrar la contraseña que nos pasa por el formulario, en MySQL usamos la función MD5(). En SQL Server debemos de usar la función HASHBYTES(‘MD5’, “la contraseña que pasemos por el $_POST”), pero debemos de convertirlo, porque si lo usamos así, se verá esto.

Error de inserción en SQL Server

Usamos la función CONVERT() para sacar el HASH de MD5. Saldrá así.

Solución de inserción en SQL Server

Comprobar la sesión de los usuarios (comprobarsesion.php)

SQL Server

Diferencia de código PHP en SQL Server

MySQL

Diferencia de código PHP en MySQL

Primer cambio realizado e importante. Si en sqlsrv_query, no ponemos las opciones $param=array(), $options=array(“Scrollable” => “static”) saldrá un error en el ODBC de SQL Server (para ver los errores de sqlsrv, debemos poner print_r(sqlsrv_errors())). Este es el error.

Error Scrollable en SQL Server

Podemos poner el Scrollable en “static”, “keyset” o en “buffered”.

En mysqli_num_rows se cambia por sqlsrv_num_rows.

En mysqli puede funcionar con usar PDO, pero en sqlsrv no. Usamos sqlsrv para todo.

Los mysqli_fecth_array y mysqli_fecth_assoc, el primero es el por defecto del fetch y el otro es para decir que los array son asociativos. Para sqlsrv se debe usar la función sqlsrv_fetch_array y después de la consulta realizada, escribimos SQLSRV_FETCH_ASSOC para decir que es un array asociativo, SQLSRV_FETCH_NUMERIC que es un array numérico o SQLSRV_FETCH_BOTH (por defecto). También la función sqlsrv_fetch_array se puede definir más cosas.

Sitio de la administración. Los empleados y clientes tienen los mismos cambios pero con diferente tabla.

Empleados – Clientes

SQL Server

Diferencia de código PHP en SQL Server

MySQL

Diferencia de código PHP en MySQL

Borrar empleados – Borras clientes

SQL Server

Diferencia de código PHP en SQL Server

MySQL

Diferencia de código PHP en MySQL

Sitio del empleado – Las casas, pisos, locales y garajes con exactamente igual, pero puede diferenciar por tener más valores en unas tablas que otras.

Casas - Pisos – Locales – Garajes

SQL Server

Diferencia de código PHP en SQL Server Diferencia de código PHP en SQL Server

MySQL

Diferencia de código PHP en MySQL Diferencia de código PHP en MySQL

Compras casas – pisos – locales – garajes

SQL Server

Diferencia de código PHP en SQL Server

MySQL

Diferencia de código PHP en MySQL

Alquiler casas – pisos – locales – garajes

SQL Server

Diferencia de código PHP en SQL Server

MySQL

Diferencia de código PHP en MySQL

7.4. Copias de seguridad de SQL Server 2016

Por Transact-SQL

Copia de seguridad de la base de datos en TransactSQL

Se usa el BACKUP DATABASE “nombre de la base de datos” y luego la ruta que se guardará la copia de seguridad. La copia de seguridad tiene que ser con la extensión .bak

Por PowerShell

Copia de seguridad de la base de datos en Powershell

Con PowerShell se usa el comando cmdlet Backup-SqlDatabase –ServerInstance “Servidor y el nombre de la instancia” –Database “nombre de la base de datos” –BackupAction como quiero guardar la base de datos entera, poenmos Database

Mediante un cursor almacenado

Copia de seguridad de la base de datos con cursores en SQL Server

Con este curso lo que se hace que puedas hacer copias de más de una base de datos. Podemos inluir la que queramos, como en la imagen puesta, se hará una copia del master e inmobiliaria pero no la base de datos model, msdb y tempdb.

La copias se guardará con el nombre EJ: inmobiliaria_20170613.bak

8. Posibles actualizaciones

Introducción a SQL Server Management Studio. Este programa, que usar el núcleo de Visual Studio, es una herramienta gráfica para administrar SQL Server 2016, permitiendo comodidad al cambiar la configuración del servidor de base de datos, tanto el uso para diseñar scripts SQL.

Servidor de replicación de SQL Server. Instalación del servicio de replicación en un servidor de replicación SQL Server 2016 y comprobar su funcionamiento.

9. Costes

Si solamente contamos el coste del software de SQL Server 2016, Windows Server 2016 Standard y Windows 10 Pro, este sería su precio.

SQL Server 2016 Standard Edition

Caja del producto SQL Server 2016 Standard

4.124,00 €

Windows 10 Pro

Caja del producto Windows 10 Pro

279,00 €

Windows Server 2016 Standard – Licencia de acceso 10 clientes

Caja del producto Windows Server 2016 Standard

1.790,00 €

Total: 6.193,00 €

10. Resumen y conclusiones

Mirando todo lo procesado, si es montar solamente un página web sencilla, elijo más MySQL por su rapidez, pero si es una página web que tiene que cambiar datos, como una página web que nos muestra todos los productos de una tienda, prefiero la gestión que nos da SQL Server.

Los dos sistemas de gestores de base de datos están bastante bien, pero MySQL es más fácil de usar y es mucho más rápido que SQL Server, pero SQL Server gana que darte herramientas de administración de datos, una consola (Transact-SQL) mucho mejor que la consola de MySQL. Te dice todos los errores que tienes al ejecutar al crear una función por ejemplo, en MySQL cuando ve un error, corta la ejecución. En T-SQL puedes ejecutar varias consultas a la vez, en MySQL no.

En MySQL gana en:

  • Rapidez.
  • Sencillez.
  • Come pocos recursos del servidor.

En SQL Server gana en:

  • Herramientas administrativas mejores.
  • Permite ejecutar procedimientos o funciones creadas antes de almacenarlas.

No es tan complicado en crear un cursor, función y procedimientos que en MySQL. Si alguien viene de Visual Basic, no tendrá problemas en crear funciones o procedimientos. Me gustan los dos, elegiría uno dependiendo de qué va a ser mejor.

11. Bibliografía y documentación

Aquí tenéis toda la bibliografía sacada.

Documentación de SQL Server Transact-SQL: https://msdn.microsoft.com/es-es/library/bb510741.aspx

Documentación de SQL Server para PHP: http://php.net/manual/es/book.sqlsrv.php y https://docs.microsoft.com/en-us/sql/connect/php/microsoft-php-driver-for-sql-server

Documentación de Windows PowerShell para Windows Server: https://learn.microsoft.com/es-es/powershell/

Gracias a la comunidad de StackOverflow: https://stackoverflow.com/