[Powered by Google Translate] [Semana 8, Continuación]
[David J. Malan] [Harvard University]
[Esta é CS50.] [CS50.TV]
>> Este é CS50, de xeito que este é o fin da Semana 8 aquí.
Nós, por suposto, tiña un pouco de un furacán no comezo desta semana,
entón agora é realmente só ti e eu nesta aula,
pero hoxe, seguimos a nosa conversa sobre PHP
e sobre a programación web en xeral, e tamén introducir a idea
de bases de datos, especialmente un chamado MySQL, que é moi popular nos días de hoxe,
en gran parte debido á súa escalabilidade, así como porque o seu ser libre e de código aberto.
>> Pero, primeiro, un ollar de onde paramos a última vez.
Lembre que estabamos a mirar para os varios exemplos Frosh mensaxería instantánea,
e esta foi a forma horrible que eu vin cuns 15 + anos
a fin de que os alumnos sobre rexistro campus para deportes Caloiro intramurais
sen realmente ter que percorrer máis en todo o curro para Wigglesworth
a desprazar unha peza físico de papel debaixo da porta algúns Proctor.
En vez diso, cambiou todo en liña, pero para iso é necesario facer uso
dalgunhas tecnoloxías, para un, necesitabamos HTML, linguaxe de marcado de hipertexto,
que unha vez máis é esta linguaxe de marcado co que construír páxinas web estruturalmente.
>> Empregando un pouco de CSS estes días, as follas de estilo en cascada,
polo cal utilizamos estilizações da páxina web usando unha sintaxe un pouco diferente,
mentres que o HTML foi todo sobre a súa estrutura.
Necesitamos tamén de introducir unha linguaxe de programación web.
Neste caso, imos empregar PHP e PHP vai permitir-nos
a saída de contido de forma dinámica, así como facer as cousas como programáticas
envío de e-mails, como foi o caso sobre a nota que saíu a semana pasada.
>> Lembre que o código para iso foi en 2 partes.
Un deles, tivemos froshims3.php,
e este foi en gran parte de traza un formulario HTML dentro del,
un pouco de CSS aquí os atributos de estilo
para que a forma en si sería centrado na páxina, pero ademais
tivemos algunhas entradas forma representativa, un campo de texto, unha caixa de verificación,
botóns de radio, un menú de selección, e un botón de envío.
E a través deste formulario, sometidos a un arquivo que foi aparentemente chamado register3.php,
que por si só parece un pouco algo como isto.
Agora, a maior parte do código register3.php, recall, era todo sobre e-mail.
El fixo un pouco de validación do formulario que foi enviado para asegurar
que os campos foron realmente dende que se esperaba.
A continuación, chamado algunhas funcións PHP usando un pouco nova sintaxe,
aínda que sexa prestado de C.
>> Este operador frecha nos permite facer uso de algo chamado programación orientada a obxectos.
Non imos entrar nese detallados aquí, pero sei que por agora
é un xeito de ter funcións asociadas cos obxectos,
que son un tipo especial de estrutura, como vimos en C.
Pero, por agora, só ter fe en que esta é a sintaxe correcta para usar
ao usar unha biblioteca como esta biblioteca PHPMailer.
E entón, ao final deste ficheiro que xerara dinamicamente un e-mail
que foi enviado para a miña conta jharvard@cs50.net
da miña conta jharvard@cs50.net,
e informado ao usuario, así, que foron rexistrados a este deporte.
Iso é moi fermoso o que o sitio web de mensaxería instantánea Frosh fixo todos estes anos
cando aplicado, concedido, nun idioma diferente,
pero mostra-lle, quizais, o poder que ten
agora que pode expresarse non só programaticamente
a un nivel baixo nunha linguaxe como C, pero a un nivel moito máis elevado
con estas aplicacións do mundo real, como correo electrónico moito para realmente resolver
algúns problemas do mundo real.
>> Agora, por suposto, a pesar de eu usar este script para xerar algún
dinámicamente a partir de correo-e jharvard@cs50.net, o que é de feito unha conta
que eu teño acceso, a non ser moi coidadoso para enviar
correo só de contas que son, en realidade, o seu propio,
para que as cousas se nun pouco de auga quente na vida.
Con iso dito, imos agora transición cara a resolución dun problema completamente distinto,
a de estados de retención.
Agora, o que iso realmente significa?
HTTP, este protocolo de transferencia de hipertexto,
é na verdade un protocolo sen estado, e que isto significa que
cando tira algo Google.com e escriba Intro
normalmente o seu navegador ten algún tipo de icona que, entón, xirando
resulta nalgunha páxina web que está a ser descargado,
e despois que pequeno icono deixar de xirar, e que de feito suxire
HTTP que teña completado algún tipo de conexión co servidor e é iso.
O HTTP é stateless no sentido de que non mantén
unha conexión persistente co servidor no Skype mesmo fai
ou Gchat fai porque con HTTP
o presuposto é que unha vez que foi buscar unha páxina web que é iso.
>> Agora, en realidade estes días en sitios como Facebook e Google Maps
e Twitter e afíns non hai dinamismo moito máis polo que
mesmo despois de que a icona deixar de xirar pode de feito ter máis actualizacións
do servidor, máis tweets máis actualizacións de estado en Facebook e afíns.
Pero aínda que está a usar unha técnica que imos falar nunha ou dúas semanas
coñecido como Ajax usando unha linguaxe chamada JavaScript
pero ao final do día, o HTTP é aínda sen estado.
E aínda se quere algunha maneira lembrar de cousas sobre un usuario
mesmo despois de teren desconectado do servidor
PHP fai darlle un medio de facelo
porque, como vimos por última vez, PHP ten un número de superglobals,
e unha superglobal é, de novo, unha variable global especial
que se entrega a vostede polo servidor web e polo propio PHP.
>> Non ten que facer nada para poñer valores en que,
e entre os superglobals que vimos ata agora son obter e publicar,
que é onde os campos do formulario son feitas automaticamente para ti,
así como un par de outros que non vimos aínda.
Dentro $ _SERVER son algunhas variables especiais relacionados co propio servidor.
Cal é o enderezo IP, o que protocolo, HTTP ou HTTPS que utiliza,
o método de solicitude que usa e afíns, por iso hai algunhas interesantes,
detalles suculentos sobre o servidor, e, de feito, o usuario de alí tamén.
Hai $ _COOKIE, que é onde estas cousas chamados cookies son almacenados.
Non imos gastar tempo cos cookies-se hoxe,
pero sei agora que unha cookie é só un pequeno anaco de información
que un servidor web pode plantar nun navegador
e á súa vez a súa memoria RAM ou disco duro ordenador
para almacenar informacións sobre un usuario, por exemplo, o seu nome de usuario
de xeito que xa non ten que escriba-lo cada vez que entrar ou algún
número exclusivo ou identificador para este usuario
de xeito que non ten que molestar-los cos mesmos tipos de preguntas sobre
preferencias no futuro, pero a maioría de interese
agora é de R $ _SESSION.
>> Este superglobal, que, como os outros, é entrega a vostede automaticamente polo PHP
cando está escribindo baseado en PHP sitios
pode almacenar o que quere, cadeas, enteiros,
puntos flotantes, valores, matrices, obxectos,
realmente calquera cousa que quere, e permite que garde o de tal forma
que, mesmo se o usuario visitar vostede agora e despois
arredor dun minuto a partir de agora ou 5 minutos a partir de agora, porque
eles levan o seu tempo antes de premer nalgún outro enlace
PHP pode garantir que o que poñer na sesión que superglobal
minutos ou 5 minutos aínda estará alí cando o usuario retorna.
E debaixo da capa desta superglobal é aplicado por medio de
isto chamados cookies, pero polo de agora, só unha abstracción
que é unha especie de equivalente a un cesta da compra.
O que queira que, programador, coloque en que
array asociativo superglobal vai estar alí algún número de minutos despois
ata que apaga-lo ou ata que o usuario pecha o seu navegador completo.
>> Imos dar un ollo a un exemplo de como esa cousa é realmente utilizada.
En counter.php entre pezas de hoxe de código
temos a liña a seguir.
A principios deste arquivo, temos unha morea de comentarios azuis, que son desinteressantes para agora.
Pero, na liña 13, temos unha nova liña,
session_start, e que, en realidade, fai exactamente o que di.
Iníciase sesións.
El permite que use ese gran _SESSION superglobal $, e é tan sinxelo coma iso.
Agora, se seguir buscando na liña 16, imos tentar descubrir o que esta páxina web vai facer.
If (isset ($ _SESSION ["contador"]), entón vai adiante
e garde na variable de contador, contador de minúsculas,
$ _SESSION ["Contador"].
Este semella ser declarar unha variable local chamada contador
dentro da cal está poñendo unha copia de todo o que está dentro da superglobal
chamado sesión no local "contador".
Outra, ao parecer, este contador local pouco variable, é inicializar a 0.
>> Pero, a continuación, algunhas liñas máis tarde, o 26 aviso que a copia da sesión de balcón,
súa clave, ten un valor asignado novo, que é o seu valor actual máis 1.
En suma, este ficheiro parece estar a actualizar
un contador que está almacenado dentro do superglobal sesión
aumentando o de 1, pero retén unha primeira copia do valor anterior
almacenando-o desde unha variable local chamada $ contador,
e aquí imos ver o que permanece.
Acontece que é moi bonito só HTML.
Na parte inferior desta páxina vemos na liña 37 que xa visitaron esta web
número do contador de veces, polo que hai un par de características interesantes aquí.
Un deles, esta é claramente unha variable, pero iso non basta só poñer
$ Contador no corpo do seu HTML porque, por suposto,
se é só alí entre o seu PHP HTML vai asumir que é só HTML.
Vostede literalmente quere US $ contador a ser impreso en pantalla.
>> Pero, en vez de caer en modo PHP
con este anaco de sintaxe que pode introducir dinamicamente un valor aquí
moi semellante en espírito para o que fixemos a última vez con
introducir valores en cordas.
En realidade, esta é só unha notación abreviada para dicir algo como isto literalmente,
print ($ contador) ou mesmo algo así como printf (% s, contador),
ou mesmo, como pode ver en liña ou en libros de texto,
hai unha función en PHP chamado eco
que fai a mesma cousa, e de todos aqueles son só formas máis alento
dicir <? =.
Neste caso, o que non é preciso poñer
a palabra PHP despois do punto de interrogación.
Este é notación abreviada para, unha vez máis, o que acabamos de ver hai pouco
que está ecoando algún valor.
>> Imos ver o que o resultado final deste realmente é.
Deixe-me pasar no noso arquivo counter.php,
e imos ver o que David só cometeu un erro ao xogar co código alí.
Imos corrixir o que errou,
eo erro parece estar alí, foi na liña 37.
Segundo o principio da páxina que visitei este sitio 0 veces.
Ben, imos adiante, agora e na parte superior do seu navegador prema no
Recargar icona e clic en Recargar,
e agora eu visitei o sitio dunha vez, 2, 3, 4, 5, 6, 7, 8.
E, de feito, se olharmos para a fonte desta páxina o código fonte está cambiando,
e conta a ausencia completa de calquera PHP, e iso é porque
Código PHP é avaliado ou interpretado do lado do servidor,
e así que significa que a saída do script PHP é o que é, en última análise enviado para o navegador,
que neste caso é un código HTML puro e algún texto cru.
O que está a suceder aquí?
>> Ben, con relativamente poucas liñas de código que eu son capaz de almacenar
persistente ao longo de varios segundos, ou se esperou tempo suficiente,
minutos, incluso horas, un valor dun xeito que fai HTTP
parecen stateful como se tivésemos mantido
esa conexión co servidor, e é só lembrar o que eu dixen a última vez,
pero en realidade non hai unha morea de complexidade suceder debaixo do capó
envolvendo cookies que está permitindo PHP para me dar esa ilusión
deste cesta da compra-como recurso.
Por agora, un exemplo trivial onde estamos só almacenar un número enteiro,
pero este recurso vai volver a ser de gran valor
cando comezamos a falar sobre os proxectos máis complexos,
entre eles conxunto de problemas 7.
Este é o seu problema moi último no CS50.
Eu sei, é tan triste, pero o que vai atopar é que imos concluír
Esta parte do semestre, en realidade, a transición
a partir do contexto C certamente ao contexto de PHP
Pero ao usar algúns dos fundamentos mesmos
falamos por algún tempo.
>> O obxectivo con pset 7 é aplicar CS50 Finanzas,
que é a súa propia versión de Yahoo Finance ou Finanzas Google
ou mesmo Etrade.com en que ten a capacidade de
mirar para arriba os prezos das accións para símbolos dadas, pero máis que iso
ten a capacidade de "comprar" e "vender" accións
que son negociados en varias bolsas de valores, porque como esta páxina principal
aquí suxire, que é realmente a medida en que nós comezamos
o conxunto de problemas para ti, ten un formulario de login que está pedindo un nome de usuario e un contrasinal.
El ten un botón de envío, pero despois, como imos ver, finalmente,
non hai nada realmente a suceder debaixo do capó aínda porque
Réstalle aplicar a capacidade de rexistrar novos usuarios,
a capacidade de comprar accións, vender accións,
para realmente ollar para arriba os prezos das accións actuais.
>> E, de feito, este mundo será tan real como posible porque fixemos
incluír un pouco de código que permitirá que cunha única función
para consultar Yahoo Finance, que marabillosas facilita datos libres
para ollar cara arriba os prezos das accións con base no símbolo de acción ou símbolo Ticker,
e terá de volta o prezo actual da acción do día.
Os datos que está realmente a ver neste pset particular será
sobre como o mundo real como pode obter de xeito que está realmente a interfaz
con accións do mundo real, os prezos reais,
e imos ver canto diñeiro pode facer posible
ao longo dos próximos días de xogar co seu conxunto propio problema.
>> Pero imos primeiro definir o escenario para crear algo que seguramente é máis complicado
que counter.php, que é máis complicado do que calquera un dos exemplos Frosh IMS, ata agora,
e imos tentar introducir unha paradigmas poucos aquí que nos permite
tanto para pset 7 e quizais o seu proxecto final, se fai algo baseado na web
manter o seu código ben organizado, para manter-se sa,
e dar un paso en dirección a colaborar, xa sexa en proxecto final do CS50
ou ademais, se continúa a programar algo no futuro.
Hai este paradigma de deseño xeral
en informática e no desenvolvemento de software en xeral
coñecido como MVC, o modelo de controlador de vista,
e este é un acrónimo parvo que describe unha idea moi legal,
que é a separación de distintos aspectos do programa,
especialmente manter a lóxica separada ou a lóxica do negocio de un sitio web
de xeito que todo o que implica cousas como
chamar funcións e consulta de bases de datos e similares
acontece non entre o seu HTML
senón en arquivos separados, e, de feito, hai un ficheiro dun
tipicamente que chamou o controlador
que é realmente o cerebro detrás da operación, e imos ver un exemplo
iso en só un momento.
>> Hai un modelo que é un código de programación
que fai a falar cos seus bancos de datos, que fala con Yahoo Finance e similares,
e despois hai o V en MVC, os puntos de vista,
todo o material que está relacionado coa estética, os ficheiros que realmente conteñen
HTML, CSS e quizais o seu semellante.
A idea aquí, como esta figura indica, é que o controlador
é o arquivo, como veremos en breve e, como podes ver particularmente en pset 7,
que o mundo fala a vía os seus navegadores.
Ese é o arquivo que será visitado en internet pública,
pero o controlador fala potencialmente modelo,
o que é un ou máis ficheiros que conteñan código relacionado aos datos,
código relacionado coa base de datos e similares, e, a continuación, se fala de
o controlador de un ou máis arquivos, coñecidos como puntos de vista,
que son a estética dunha páxina web, modelos de tipos,
que pode levar algúns datos como entrada, pero ao final do día,
a única lóxica dentro dunha visión debe ser a prestación de datos,
iteração sobre un loop e realmente cuspindo algúns
Baseado en HTML Rendition algo do mesmo ou incluso como un PDF.
>> O que é legal sobre o MVC é que pode ter puntos de vista diferentes
con base no tipo de dispositivo, con base no tipo de formato de ficheiro que, en realidade,
queren mostrar para o usuario.
Imos dar un ollo a algúns exemplos progresivamente máis complexas e ben deseñado
comezando primeiro coa versión 0 aquí.
Deixe-me ir adiante e abrir-se no noso directorio MVC hoxe
un arquivo chamado index.php no directorio 0.
Teña en conta que este é un sitio super sinxelo e moi underwhelming
que é unha especie de versión 0 dunha páxina de inicio para CS50,
e perciba como temos unha ligazón a charlas, temos unha ligazón a Syllabus,
e se eu seguir o enlace para notificación conferencias que a URL
encima vai cambiar a lectures.php.
Se eu siga a ligazón para notificación Semana 1 que os cambios de dirección para week1.php.
Parece haber unha estrutura moi simple xerárquica aquí.
>> Imos dar unha rápida ollo debaixo do capo coa forma como iso é colocado para fóra,
e de feito, se eu ollar para index.php é moi sinxelo.
En realidade, a pesar de eu chamei esta imaxe dun PHP non hai ningún código de programación real.
Hai un comentario que escribín aquí en PHP só para que o usuario non acabar vendo isto.
Claro que, como antes de calquera cousa, que está entre etiquetas PHP
é interpretado, aínda que sexa un comentario, e para interpretar un comentario
significa só para xoga-lo fóra no final do día e en realidade non
enviá-lo para o navegador, para que todo aquí é só estética.
Se eu abrir semellante lectures.php iso tamén é só un arquivo codificado.
El pasa a ser chamado de algo. PHP,
pero é realmente xusto. html, e week1.php, week2.php
Do mesmo xeito son só de marcación, non hai unha morea de fallos deste proxecto.
Un, é unha cantidade enorme de copiar / pegar.
Aínda que o único que está cambiando entre estes arquivos é a lista non ordenada,
as etiquetas li, eu aínda así ten doc tipo, HTML, cabeza,
título, corpo preto, preto HTML e máis
en todos os arquivos, o que significa que se eu queira reestruturar
Esta páxina web ou restylize que eu teño que entrar e cambiar
todos eses arquivos manualmente ou con algún gran localizar e substituír.
>> Imos dar un paso cara a un proxecto máis intelixente, máis pensando na versión 1 aquí
que conforme a ler o meu que incluímos para que poida tocar xunto con
estes máis vagaroso na observación de casa que temos aquí
un resumo dos arquivos na versión 1 deste sitio web,
e parece que eu tomei sobre min mesmo para fatorar
un código común, header.php e footer.php.
Ben, imos dar un ollo ao que está dentro do primeiro deles.
Header.php parece familiar,
pero mire onde se cortou?
Logo da liña 19, entón iso é todo o que era común
do index.php arquivos, lectures.php,
Semana1 e week2.php do exemplo anterior.
O que fixen foi copiar e todo corte que era común a todos os arquivos,
poñelas nun arquivo de cabeceira separado, e da mesma forma en footer.php
eu aplicar o mesmo principio polo cal as únicas liñas interesantes
en footer.php son estes corpo, dous preto e HTML preto.
>> Pero o que significa isto agora é que na nova versión
de aviso index.php canto máis simple que pode chegar.
Concedido, un pouco máis enigmático ollar, un pouco menos intuitiva
a continuación de arriba para abaixo, pero, meu Deus, todo o que a redundancia é ir agora.
Nós esixir o uso de unha función PHP chamado literalmente esixir ata superior,
que lembra moito, lembre, C # include mecanismo.
Esiximos header.php na parte superior.
Esiximos footer.php na parte inferior, eo único que é diferente
ou especial sobre este ficheiro é o contido que está destinado a ser única para el.
Se eu entrar na, digamos, lectures.php, o mesmo principio se aplica.
Unha vez máis, algúns comentarios enriba, pero despois eu requiren cabeceira, pé de páxina esixen,
e entre só o contido que está realmente cambiaron.
E se nós miramos para semana 1 e semana 2 veriamos
que o mesmo principio foi aplicado alí.
Ben, nós non estamos completamente feito alí.
>> Imos dar un ollo á versión 2, que ten unha estrutura semellante,
pero mire agora introducido outra cousa.
Na liña 10 eu introducín helpers.php,
que, ao parecer, contén funcións auxiliares.
Unha función auxiliar é xeralmente unha función relativamente curto
que escribe para axudar en varios lugares,
e imos ver o que hai dentro helpers.php.
Neste caso, parece que ten dúas funcións.
Teña en conta que do outro día co noso exemplo cubo
pode definir as súas propias funcións en PHP, e que eu teño feito agora é que eu teño
funcións definidas chamados facer rodapé e facer cabeceira,
a primeira das cales utiliza un parámetro chamado datos,
cuxo valor por defecto é un conxunto baleiro, como suxire alí,
e podemos realmente escribir este aínda máis sucinta na última versión do PHP
dicindo colchete aberto, pechado colchete.
Isto significa que unha matriz baleira de tamaño 0, pero aínda así unha matriz.
>> Esta función extracto é un pouco especial en que
o que fai é que recibe como argumento dunha matriz asociativa
que 0 ou máis pares de valores clave, e se ten unha chave de foo
e un valor de barra a función extracto
crea unha situación na que agora, a partir de liña 11,
ten unha variable local chamada $ foo cuxo valor é bar.
E se tivese máis chaves e valores na matriz de datos,
do mesmo xeito que eles son extraídos para o ámbito local
ou espazo de nome, de modo que footer.php e
a mesma idea aquí para header.php
ter acceso a esas variables.
En realidade, deixe-me abrir de novo header.php
e chamar a atención sobre o que agora parece que nesta versión.
>> En vez de codificar CS50 como título para cada páxina
entender o dinamismo que é posible agora.
Na liña 5 estou ecoando unha variable título,
pero primeiro eu estou pasando esta variable título para unha función chamada htmlspecialchars.
Un nome estúpido para unha función, sempre que sexa, pero o que realmente fai o que di.
El asegura que todos os caracteres especiais
na secuencia que foi aprobada en son debidamente escapou HTML.
Este é, en realidade, unha forma de evitar unha cousa chamada cross-site scripting ataque
en que alguén pode maliciosa ou accidentalmente
inxectar seu propio HTML na súa páxina web
colando en algunha forma, por exemplo,
algo que non espera foron bastante, especialmente código JavaScript,
como imos falar unha semana ou dúas de cada vez.
>> Este header.php agora, é unha visión
no sentido de que permite que vendo esteticamente o contido dun conxunto de datos.
Pero, máis especificamente, é un modelo.
Esta é unha especie de plan agora que queremos na cabeceira de cada páxina para ollar como,
pero hai algún dinamismo que queremos título a ser inserido dinámicamente
con base na variable título
que foi extraído cando chamada, de novo,
a función cabeceira renderse.
Agora, se nós miramos rodapé render, hai realmente non uso moito diso agora
porque footer.php non hai dinamismo calquera.
Non podería ser, pero no momento é unha lista codificado 2 etiquetas,
pero a idea aínda se aplica, de forma que, en realidade, suxire porque
se perdemos tempo tendo unha cabeceira render e unha función de renderización rodapé?
Deixe-me ir en vez agora en versión 3,
e na versión 3 en axudantes decidir simplificar aínda máis.
>> Deixe-me ter unha función renderse.
Deixe-me telo tomar outro argumento, esta vez chamada de modelo,
que se destina a ser o nome dun modelo,
e logo vou concatenar presunçosamente. php para un valor que variable,
e entón, se existe, foo.php bar.php ou header.php e footer.php,
entón eu estou indo a ir adiante e extraer os datos variables
e despois esixir ese camiño.
Noutras palabras, para usar isto agora, se eu abrir index.php
entender que eu non chamo de cabeceira renderización máis.
Eu só chamar render, pero eu pasar un valor de cotización da cabeceira
deixar claro que o modelo que realmente quero para cargar.
>> Entón aquí entender o que estou facendo.
Estou pasando dinamicamente unha clave de título,
un valor de CS50, e iso tamén, como vimos antes,
podería ser máis sucinto na última versión do PHP
onde podo substituír a función array con corchetes,
que eu propoño é aínda máis lexible e, certamente,
un pouco máis fácil de escribir.
E, por suposto, coa chamada render rodapé na parte inferior,
que non se incomodan en pasar un segundo argumento en todo, non matriz asociativa,
porque non hai nada dentro da dinámica que rodapé.
É só a algunhas etiquetas próximos HTML.
Bo, estamos tomando medidas para realmente limpar as cousas aquí,
pero deixe-me abrir dous exemplos finais.
Este, número 4, aviso que eu fixen unha decisión consciente agora
para mellorar o exemplo anterior, finalmente, usando unha xerarquía para os meus arquivos.
>> Teña en conta que, nese resumo, nesta me le, eu introducín
un directorio e inclúe un directorio de modelos
cuxos contidos van ser as cousas que quero incluír
e os modelos que quero facer, respectivamente.
Isto é realmente eu ser anal e tentando manter as cousas arrumadas,
manter arquivos relacionados xuntos, pero o resultado final
é que agora temos unha configuración un pouco máis ordenado, pero temos que lembrar agora
en, por exemplo, index.php
cando esixen o arquivo helpers.php
Temos que agora esixen a través de includes / helpers.php
en vez de só dicir helpers.php porque agora é realmente un sub-directorio.
Agora, como un aparte, vai ver nestes exemplos e algúns outros
funciona como esixen, esixen unha vez.
Hai realmente unha función en si chamado incluír, e todos eles teñen un comportamento un pouco diferente.
Aquí eu digo esixen unha vez para facer super claro que eu só quero aqueles
axudantes incluído no meu proxecto unha vez.
Pero se eu son coidadoso e eu estou realmente a pensar na miña lóxica propiamente
debería bastar tamén só para dicir requirir ata arriba
tanto tempo como eu mesmo non poida esixir o mesmo arquivo en outro lugar.
En realidade, esta é unha maneira un pouco máis eficiente de facer as cousas a continuación, usando
esixen unha vez, entón eu vou reducídela a só esixe.
>> Imos dar un paso adiante.
Este último exemplo, agora, a versión 5, ten unha xerarquía de carpetas aínda máis limpa.
Teña en conta o que eu fixen aquí por ler o meu nesta versión final
e agora eu teño o meu directorio HTML que eu tiven todo este tempo,
pero dentro de alí agora é só lectures.php, index.php,
week1.php e week2.php.
O directorio inclúe agora vive á beira do directorio HTML
de modo que ao mesmo nivel como un irmán, por así dicir.
Así fai o cartafol de modelos.
O takeaway clave aquí é que eu introducido estrutura un pouco máis,
pero o elemento clave agora é que só os arquivos
que precisan estar accesibles na web publicamente endereçável
por unha URL na internet pública están no meu directorio HTML.
>> Arquivos mesmo tempo, outras helpers.php, footer.php,
header.php, que son, sen dúbida, se cadra máis sensible,
quizais axudantes, en realidade, ten algúns nomes de usuario e contrasinais ou algún intelectual
propiedade da mina, funcións que eu realmente non quero que o mundo vexa, aínda que accidentalmente.
É unha boa práctica para manter fóra do directorio HTML pública
todos os ficheiros que non precisan de ser público.
Todo o que tes que facer neste caso cando se mira, por exemplo,
o ficheiro index.php no directorio de HTML,
notar só temos que ser un pouco máis coidadoso cando requirindo
ou esixir unha vez que este arquivo.
Eu teño primeiro facer .. para ir ao directorio pai,
a continuación, facer / includes / helpers.php
a mergullo de volta para o arquivo que eu me importa.
>> Algunha preguntas, entón no MVC
ou esta encarnación relativamente simple mesmo?
E deixe-me deixar claro que nós nos concentrados un pouco sobre a
V aquí, os puntos de vista e do factoring fóra destes modelos.
Nós non temos realmente distingue M C aínda.
En realidade, non hai realmente ningunha M aquí, e mesmo o noso C,
controlador, non está realmente facendo todo o que moito, pero vai ter moito máis
familiarizado con ambas as dúas cartas de MVC,
ou mellor, vai ter moito máis familiarizado co C
en MVC para conxunto de problemas 7, entón non hai máis que iso no horizonte.
Preguntas?
Hai, de feito, ninguén aquí.
>> Ok, imos agora pasar ao segundo e último tema para hoxe.
Que é a introdución dunha base de datos.
Ata este punto, tivemos algunhas formas de almacenar datos.
Usamos variables.
Volver no noso arquivo C, I / O debate que comezamos a usar arquivos de texto
e utilización de ficheiros como fprintf, e entón nós nin comezou
fala de CSV un pouco, valores separados por comas,
para todos estes nos permitiu ter datos almacenados
ou non persistente ou persistente.
Pero aínda CSVs non son realmente propicio para a procura
e inserción e exclusión.
É realmente só un arquivo de texto separado por comas parvo
liña por liña por liña por liña, por iso, se quere
buscar o arquivo o mellor que podes facer é realmente busca lineal.
Ten que comezar na parte superior do ficheiro, ler a cousa toda en,
e ollar para un valor de interese.
Se desexa inserir no que ten que facer a mesma cousa,
Iterando sobre el e escribir nun determinado lugar,
e, de feito, ten que facer toda a lóxica de buscar a si mesmo.
>> Vostede non pode facer estándar intelixente de correspondencia nun ficheiro CSV, salvo que escribir o código.
Vostede non pode facer filtración dun ficheiro CSV
a menos que se escribe o código.
Non sería bo se alguén poñer todo o esforzo
para realmente facer a busca máis fácil e rápida inserción
e exclusión e actualización e así por diante?
Isto é o que unha base de datos é.
SQL, linguaxe de consulta estruturada, é aínda outro idioma
que estamos introducindo aquí hoxe, pero iso tamén é moi accesible,
eo que estamos realmente vai facer é só arrincar del algúns dos máis saíntes
características de xeito que para pset 7, e se fai algo con base na web,
seu proxecto final, ten a capacidade de se expresar
en termos de consultas de datos.
Vostede ten a capacidade de almacenar un pouco ou un moito de datos
dun modo moito máis estructurado que será, ao final do día,
facer a súa vida máis fácil, porque co SQL pode expresar
máis precisamente, moito máis metodicamente a fin de
volver algúns subconxunto de datos dun gran corpus de datos.
>> Podes pensar nunha base de datos, neste caso, unha base de datos SQL, realmente como o Excel
ou números en que é unha folla de cálculo,
ou quizais varias follas de cálculo, e unha folla de cálculo, por suposto,
ten liñas e columnas, e iso é porque
Bancos de datos SQL son relacionais, relacional, no sentido de
que almacenan datos en termos desas táboas,
liñas e columnas.
Son máis rendemento que algo así como unha folla de cálculo,
e unha folla de cálculo está feito para ser usado por un ser humano.
Unha base de datos destínase a ser usado por un programador
escribir código contra el, así que a encarnación dun banco de datos
vai ser unha das liñas de comandos.
>> Unha das bases de datos relacionais máis populares alí fóra, é, unha vez máis, MySQL,
que é marabillosas libre, rendemento moi elevado, e é iso que
Facebook usado moi cedo e ata certo punto aínda hoxe
para almacenar unha gran cantidade dos seus datos, e imos ver en un momento
que a utilización de ordes relativamente simple
podemos seleccionar datos, inserir datos, actualizar datos,
borrar os datos e afíns, pero, afortunadamente, hai unha interface máis agradable
que só escribindo nun ventá de branco e negro aquí.
Nós imos empregar para pset 7 e ademais unha ferramenta gratuíta chamada phpMyAdmin.
O nome é mera coincidencia.
A ferramenta pasa a ser aplicado en PHP,
pero que é fundamentalmente irrelevante.
O que é útil sobre phpMyAdmin é que é unha utilidade baseado na web.
Nós pre-instalado no aparello para ti,
e con el podes crear táboas nunha base de datos,
pode inserir datos, borrar datos, e xeralmente ver
seus datos nun ambiente moi agradable.
Seus usuarios non vai utilizar o phpMyAdmin.
>> Isto é realmente só unha ferramenta administrativa ou creador
que a ver e fuçar seus datos e descubrir como estrutura-lo,
así como vostede mesmo pode utilizar o Excel ou Numbers,
pero que vai ser unha gran forma de ver o que está a suceder debaixo do capó
de modo que vostede poida concentrarse no problema interesante resolver e non tanto
sobre os comandos arcanos.
Imos dar un ollo a un exemplo de datos que poden ser almacenados tabularly
nunha base de datos relacional.
Aquí está un exemplo.
Agora, desgraciadamente, phpMyAdmin erradamente no lado de xeito botando palabras de máis
e gráficos en ti, pero se mellorar en só sobre o
Columna de ID, a columna de nome de usuario, ea columna de hash,
iso é efectivamente unha folla, pero pasa a ser un tramo de
dunha mesa no interior do aparello
usando un ficheiro que nós ofrecemos no conxunto de problemas 7.
>> En particular, nós dámoslle un ficheiro que representa
mesa de usuario, para folla de cálculo que contén os usuarios con 3 columnas,
unha das cales é unha identificación única a partir do 1 e sendo incrementado despois.
A segunda columna é un nome de usuario, e aqueles de vostedes que fixo Hacker,
edición Hacker para pset 2, pode recoñecer algúns destes nomes de usuario, polo menos.
No lado dereito están as claves, pero eles non son claves literais.
Son hashes º, polo que acaba
que o almacenamento de claves nunha base de datos é unha idea moi mala.
Vós todos xa debe ter lido nalgún momento algún sitio
ou base de datos de algunha compañía que está a ser comprometida, e entón ten que
cambiar o seu contrasinal, precisa para obter restituciones para as cousas
porque un cara malo, en realidade rompe na súa conta como resultado.
>> O almacenamento de claves en texto puro, non cifrado nun banco de datos
é completamente estúpido, e aínda é moi divertido
despois de ler sobre algunhas empresas moi coñecidas
ás veces na prensa cuxas bases de datos están comprometidos,
e que parte non é divertido, pero o feito de que os bancos de datos conteñen cifrado
claves é ridículo, porque, literalmente, unha liña de código
pode protexer contra esta ameaza en particular, e iso é o que nós fixemos aquí.
Mesmo para a nosa versión Finanzas pouco fake CS50
estamos cifrar contrasinais só para unha boa medida, e do feito de que
todas esas contrasinais comezan con $ 1 $ é só unha convención.
Isto só significa que son criptografada ou realmente hash,
que é como unha función de encriptación unidirecional
polo cal non pode reverter os seus efectos con algo chamado MD5.
>> O feito de que 50 é despois o que significa que un valor de sal
50 foi usado para hash todas esas contrasinais, excepto un.
Meu, por suposto, como podes ver alí, hai,
estaba usando un sal diferente, para aqueles de vostedes que estean un pouco desarmado
talvez en Hacker 2, que podería ser o resultado de termos usados
un hash diferente do que os outros, porque o meu contrasinal é realmente o mesmo
como algún outro usuario alí enriba.
En realidade, se estaba esperando todas estas semanas para descubrir
o que esas claves foron aquí foron as claves que foi desafiado
de crack na edición de conxunto de problemas Hacker 2, polo tanto, non moi complicado.
En realidade, Malan era o mesmo que jharvard,
pero se volvemos ollaron diferente.
>> Concéntrase en jharvard de vermello porque eran salgados diferente.
O algoritmo foi perturbado de xeito que o
valor de hash, o valor cifrado parece un pouco diferente
porque as entradas eran lixeiramente diferentes, pero o contrasinal debaixo do capó
aínda era, en última análise carmesim.
Agora, quen se importa con iso?
Ben, nós estamos dando-lle os usuarios de exemplo, os nomes de usuario de mostra
e hashes das súas claves, de modo que realmente ten algúns
clientes para CS50 Finanzas cando saír do chan co seu código.
Vai ter que aplicar máis táboas dentro do MySQL, dentro da base de datos.
Vai ter que crear máis follas de cálculo, de forma eficaz, pero decidimos darlle un agasallo
para comezar, e vai ver que a especificación do conxunto de problemas
orienta o proceso de importación esta táboa
e tamén explicando o que algunhas das características son,
e tamén vai ver que lle proporcionar o código
para xestionar a suma ou cifrado desas claves,
así que non se preocupe moito co que MD5 ou similares é realmente todo.
>> Entón, SQL, linguaxe de consulta estruturada.
É dicir, moi simplemente, a linguaxe que está a piques de comezar a usar en pset 7
e, quizais, ademais de solicitar datos dalgún base de datos.
Os datos son, de novo, almacenados tabularly nestas táboas relacionais, columnas e liñas,
pero usando unha sintaxe relativamente simple como apagar,
inserir, actualizar e seleccione podemos facer exactamente isto.
Podemos eliminar da base de datos, inserir,
actualizar datos, así como seleccionar, ou sexa, recuperar datos da base de datos.
Como imos facelo?
Deixe-me ir adiante para o aparello.
Deixe-me puxar arriba http://localhost,
que, de novo, é o lugar propio aparello.
Iso é o seu apelido por defecto.
E deixe-me ir a / phpmyadmin.
Isto acontece por ser unha URL especial que o aparello está configurado previamente para entender
que inmediatamente me pide un nome de usuario e contrasinal.
>> Como de costume, eu vou escribir jharvard e carmesim,
pero enténdese que é a conta de administrador no computador.
É só unha coincidencia que hai tamén un jharvard rexistrado para CS50 Finanzas.
Jharvard, carmesim, enter me dá a interface de usuario que vimos
un reflexo dun momento atrás, e é un pouco esmagadora no primeiro,
pero seguro, vostede non vai ter que premer a maioría dos enlaces nesta ferramenta.
Vai acabar usando un pequeno subconxunto que son super útiles,
o primeiro dos cales é bases de datos aquí.
Se eu subir aos bancos de datos, observe que estou solicitada a crear unha base de datos.
Este é como crear un novo ficheiro de Excel, de forma eficaz.
Eu estou indo a ir adiante e chamar esta charla, e eu só vou ignorar o campo alí, agrupación.
Isto ten que ver coa representación dos datos no mesmo,
e eu vou clic en crear e agora entender como eu deixar de ir crear
na parte esquerda onde di ningún base de datos
Eu debería ver en breve a base de datos de clase.
>> Se eu agora fai clic no lado esquerdo, a base de datos de charla,
entende meus guías cambiar un pouco.
Eu teño estrutura, importación SQL, exportación e algunhas outras cousas.
A estrutura é practicamente en branco.
Sen táboas atopadas na base de datos, como se di aquí,
entón imos crear unha táboa, e imos adiante e crear unha táboa
Como os alumnos, e cantas columnas queremos?
Imos manter isto simple, e imos gravar para cada estudante
un número de identificación, un nome e un enderezo de correo electrónico.
>> Imos mantelo simple así, entón 3 columnas, vai.
A forma que ve aquí é agora un pouco confuso e esmagadora,
pero temos que pasar por iso liña por liña, por iso moi rapidamente imos dar
a primeira columna neste banco de datos un nome de identificación para o identificador único.
Vai ser un enteiro. Eu podo realmente ignorar lonxitude e valores.
Un int vai ser de 32 bits, non importa o que escribe alí, entón imos deixalo en branco.
Valor por defecto, eu podería facelo nulo, conforme definido.
Vou deixar isto quedo. Non imos preocupar sobre os valores por defecto.
Imos cambiar ata aquí para a dereita, atributos.
Isto é interesante.
Imos adiante e un pouco arbitrariamente dicir que as identificacións deben ser asinados.
Non imos perder todos os números negativos.
>> Imos 0-4000000000, máis ou menos,
e entón non imos tocar en calquera destes campos só aínda alí,
pero deixe-me entón escribir o nome aquí,
e despois o outro era o correo electrónico, de modo que o problema é correo-e
e nome, obviamente, non enteiros, entón imos cambiar estes para un campo diferente.
Acontece varchar, lonxitude variable char,
é como unha corda nun banco de datos SQL
pero unha lonxitude variable, e realmente ten que dicir-lle anticipadamente o
lonxitude máxima de cadea, entón eu vou un pouco arbitrariamente
por convención tipo 255 caracteres.
Eu podería perfectamente dicir 32. Eu podería dicir mil.
Vostede tipo de necesidade de decidir por si mesmo en base ás súas características demográficas que é
o nome da máis longa alumno e ir con ese número ou un pouco maior,
pero o que é agradable sobre un varchar é que non vai para o lixo
255 bytes en nome de cada alumno.
Se é David non vai utilizar un todo 255 bytes,
pero iso é un límite superior, entón eu vou con 255 só por convención,
pero podemos debater que ser un valor menor, e para o enderezo de correo electrónico
só a ser coherente 255, pero, de novo, nós poderíamos ter o mesmo debate.
Pero eu vou facer outra cousa aquí no lado dereito.
>> O que é poderosa sobre unha base de datos é que pode facer unha chea de traballo pesado
ou complexo traballo para ti.
En particular, eu realmente non me importa o que os números do meu alumno de identificación son.
É só para ser un identificador único nunha base de datos
entón eu teño unha representación sucinta de 32 bits que o alumno
para que eu teña algunha forma de identificar únicamente a eles
para que non haxa dous Davids, por exemplo, nunha clase.
En realidade, eu estou indo a esta caixa AI, auto incremento,
de xeito que a base de datos MySQL, descobre
ID cada estudante recén inserido é que vai ser.
Eu nin sequera ten que se preocupar con iso no meu código,
e eu tamén vou escoller algo no menú de índices.
O índice caer para abaixo aquí ten primario, único,
índice e texto completo.
Vostede pode adiviñar o que quizais algunhas destas cousas son,
pero acontece que en bases de datos relacionais
vostede o programador ou o administrador de base de chegar ao preventivamente
dar consellos para a base de datos, como o que os campos
nunha táboa son un pouco especial.
>> Por exemplo, neste caso, eu vou dicir que ID
vai ser un índice primario, tamén coñecido como unha chave primaria.
O que isto significa, por definición, é que a partir de agora ID
ha identificar os alumnos nesta táboa.
Ningún estudante terá a mesma identificación, porque eu estou impoñer esa restrición ou ese índice.
Ademais, o que é que isto vai facer por min é que vai dicir
MySQL ID que é especial.
Eu me preocupe especialmente sobre ID, entón vai adiante e facer máxica súa estrutura de datos da fantasía,
construír algún tipo de árbore.
Normalmente é algo chamado de árbore B, que non mirou semanas,
pero é outra estrutura de datos como similar en espírito ás árbores binarias
e intenta que nós miramos, pero vai dicir
á base de datos neste campo é tan importante que eu probablemente
quero ser capaz de investigar sobre el, vai adiante e construír algunha fantasía
estrutura de datos na memoria para acelerar a investigación para que idealmente
son de tempo constante, ou polo menos tan próximo como sexa posible que
de xeito que non transformarse en busca lineal, o cal non será
o máis alto rendemento visión.
Por outra banda, enderezo de correo-e pode ser unha chave primaria.
>> En teoría, enderezo de correo-e de todos é único, a menos que está compartindo algunha conta
pero non é xeralmente bo para usar algo como unha corda
como unha chave primaria, porque o seu propósito na vida é identificar
liñas da táboa non hai ningunha razón para usar como máximo 255 bytes
para identificar alguén, se pode ir lonxe con só 4 bytes
ou int de 32 bits.
En xeral, unha chave primaria debe ser curto e sucinto
e, idealmente, algo así como un enteiro ou un int grande, que pasa a ser de 64 bits.
Pero un enderezo de correo-e debe ser único, e unha das características dun banco de datos moi
é impor exclusiva para min.
Ao seleccionar único aquí preto de correo-e, aínda que enviar correo-e propio
é desprazado para fóra da pantalla, eu estou dicindo para o banco de datos
non confíe en min.
Non deixe-me engadir na base de datos
o mesmo enderezo dúas veces, aínda que eu son un idiota e non estou
moi boa cos meus IFS e IFS persoa e de código PHP real
e eu accidentalmente deixar o usuario rexistrar cun enderezo de correo electrónico existente
a base de datos é un nivel de defensa para corrección
para garantir que este enderezo de correo-e duplicados non acabar na táboa.
>> Agora, pola contra, o nome que probablemente non quere facer ese único
porque, entón, nunca podería haber dous Davids ou dous Smiths Mike, por exemplo,
no seu banco de datos, de xeito que unha soa teremos que saír soa.
Eu estou indo a ir adiante e faga clic en Gardar na parte inferior dereita,
e todo parece bo, pero repare-se aquí
Esta é unha peza que, polo de agora, non vai gastar moito tempo en
porque a sintaxe é un pouco complexa, e non temos para crear táboas
todo o que, moitas veces, pero o SQL en si é unha linguaxe,
a sintaxe para que é aquí que eu destacou.
O phpMyAdmin realmente fai é que crea unha interface gráfica baseada na web para ti
co cal pode aforrar tempo e non ter que escribir manualmente fóra
unha consulta SQL moi longo como este.
>> Noutras palabras, se quere crear manualmente esta táboa,
tanto no que phpMyAdmin branco e negro rápida ou incluso en
Usando este outro guía, esta guía SQL onde podes escribir en calquera SQL consultas
quere, francamente, iso tería me levado un minuto
para realmente lembrar a sintaxe enteiro, e ata entón eu probablemente tería
fixo algúns erros de dixitación, polo que esta ferramenta é útil para cousas como esa, e é tamén instrutivo.
Pode comezar a inferir que a sintaxe é
só pola cor agradable de codificación que está engadindo phpMyAdmin
a nosa conveniencia visual.
Pero agora imos facelo no seu lugar.
Deixe-me ir a guía Inserir na parte superior, e deixe-me ir adiante e introducir, por exemplo,
un ID imos dicir, en realidade eu non me importa.
Vai auto incremento. Vou deixar o negocio de base de datos con iso.
Pero será David, e meu e-mail debe ser malan@harvard.edu.
>> Imos adiante aquí e poñer en Mike Smith como outro.
Eu vou dar un último nome, así como,
e nós imos ter que dicir smith@example.com,
e onde eu vou seguir?
Ben, parece que vai é o boton para premer, e listo.
Observe no top 2 liñas inseridas.
Esta é a consulta SQL real.
Esta é a ferramenta phpMyAdmin executado por min,
pero o resultado final, o aviso previo, se eu agora vaia á pestana de navegación,
é ver dúas liñas nesta táboa, lembra moito esteticamente
da táboa vimos anteriormente para os nosos usuarios de pset 7,
un dos cales é David Malan, un dos cales é agora Mike Smith.
Pero só para quedar claro, eu non teño usar o phpMyAdmin,
e, de feito, vai en breve ser escribir código para pset 7
que automatizar o proceso de adición de liñas, eliminar liñas, actualizar liñas e afíns,
entón deixe-me en vez de ir a pestana SQL-aquí
e escriba SELECT * FROM alumnos onde
e-mail = "malan@harvard.edu".
>> Noutras palabras supoño que agora ten
dalgunha forma HTML, e os tipos de usuario no seu enderezo de correo-e, entre outras áreas,
eo obxectivo agora é en PHP no código de back-end
para realmente ollar para outros detalles do usuario.
Cal é o seu nome completo? Cal é o seu número de identificación?
Podes escribir unha consulta SQL como esta, seleccione * de estudantes
onde e-mail = "malan@harvard.edu".
E se eu prema en ir, teña en conta que eu, e por suposto eu, volver só unha liña.
Mike é omitido este conxunto de resultados, como a colección de liñas
xeralmente é chamado, porque non ten o mesmo enderezo de correo electrónico que eu.
>> Agora, de novo, aquí para pset 7 vai usar o phpMyAdmin como unha ferramenta administrativa
e unha ferramenta pedagóxica para aprender o camiño
en todo o mundo de SQL, pero ao final do día,
vai estar escribindo estas consultas dentro do código PHP actual,
e sexa Nós prestamos moita atención no paso a paso Zamyla, en particular
onde pode obter unha xira de código de distribución para este conxunto de problemas
onde demos-lle non só a estética á páxina de login
eo logotipo agradable sexy que di CS50 Finanzas, pero nós tamén lle deu
unha morea de funcións que van facer a súa vida un pouco máis fácil.
Tamén escribiu parte do pset para ti,
a parte de conexión en particular, para darlle un sentido dun proxecto de representante
que realmente usa un controlador, por exemplo index.php,
login.php e similares, e entón podes ver o pset tamén ten un directorio de modelos
que ten todos os seus puntos de vista, todos os estética.
E así, o fluxo de traballo global en pset 7 vai ser a de que
seus usuarios visitan un controlador través dunha URL nun navegador.
Este controlador contén código PHP que escribiu, e dentro do seu código PHP
pode ser algunhas liñas de SQL aninhada entre comiñas dobres
e pasado para unha función que escribiu consulta chamada
que pode axudar a falar co banco de datos sen usar algo como
unha ferramenta administrativa como phpMyAdmin.
>> Vai ser capaz de escribir instrucións SQL en código PHP
e recibir de volta dunha matriz PHP do conxunto de resultados,
das liñas que corresponde de feito a esa consulta.
E do mesmo xeito que vai ser capaz de facer insercións ou exclusións
ou actualizacións ou similares, a sintaxe para o cal é bastante similar,
e vai ver a partir de algunhas referencias en liña, a partir do código de distribución
e do pset embalar-se exactamente como ir sobre facer isto.
Entender finalmente que estamos realmente só raiar a superficie do SQL
e de MySQL, mais o poder que realmente é que libera
a concentrar-se sobre os problemas que desexa resolver os casos de uso que quere implantar
sen ter que preocuparse tan grande, polo menos en principio,
sobre onde e como almacenar e buscar o seu banco de datos,
e esta é literalmente onde o Facebook en si ten o seu inicio
usando MySQL e en seguida, usando máis servidores MySQL e, a continuación, máis servidores MySQL
antes de tempo, ata que, a continuación, tivo que realmente comezar a pensar seriamente en como
almacenamento de datos, como almacenar as cousas aínda máis eficiente,
por iso mesmo que imos ter concedido o feito de que os índices e restricións exclusivas
e así por diante só traballar hai unha conversa moi interesante
que todo iso pode, eventualmente, levar a, así que entender que estamos só rabuñando a superficie
do que podería, finalmente, para vostede ou os seus proxectos fan-se un pouco de datos grandes.
>> Con iso dito, imos terminar aquí, e imos ver a próxima semana.
[CS50.TV]