>> 좋아요.
그래서, 물러, SQL, 쿼리 언어를 구조적.
그래서, 당신은 아마에 이것을 사용 어쩌면 CS165에 CS50, 적어도,
어쩌면 자신의 개인 프로젝트.
어떤 SQL은, 당신이 할 수 있습니까 더 일반적으로 SQL Server의?
그래?
[청취 비고]
OK, 아주했다 그 말의 보안 방법입니다.
예. 그래서 수 있습니다 당신은 데이터를 저장하는 데
더 중요 할 수 있습니다 당신은 데이터를 쿼리합니다.
그리고 이것은 앞으로 단계입니다
뭔가를 사용하여 CSV와 같은 간단한 마우스 오른쪽.
쉼표로 구분 된 변수.
비슷한 값.
마찬가지로 당신이 저장할 수 정보를 하나의 행
텍스트 파일.
그러나의 단점은 무엇입니까 CSV는 데이터를 저장하는 파일,
비록 당신이 효과적으로 그것에서 행과 열을 얻을?
그래.
>> 당신은 '이 없습니다 같은 조직
효율성 [들림].
>> 동일한이 없습니다 조직의 효율성.
당신은 무엇을 의미합니까?
>> 음, 같은 [들림] [청취] 차와 같은있다.
>> OK. 그래.
>>은 관계형 데이터베이스의 정보 당신은 여러 데이터베이스를 가질 수 있습니다
서로 결합 매우 구체적인 방식으로.
>> OK. 좋은.
>> 그건 [들림] CSV를 설정합니다.
>> 그리고 저를 조정할 수 있도록 약간 용어.
그래서 여러 테이블 데이터베이스 내에서, 물론,
그 무엇 넘어 당신은 단지 하나의 CSV로 할 수 있습니다.
하지만 실제로는 제한 CSV와 I는 주장
그 모두의 비 효율성.
그것은 레이아웃을 매우 간단합니다.
하지만 당신은 작업을 수행하려는 경우 쿼리 실행 시간에 무엇을
어떤 선택 쿼리의 CSV 파일에?
나는 그것이 큰 이전 [들림]의 의미 바로, 최악의 경우 '원인
그들은 매우 하단에 상승했다.
당신은 전체를 분류 한 경우에도 CSV 파일, 당신이 모르는 경우
그 선행, 잘, 당신은 여전히​​해야 할 것입니다
전체를 검색합니다.
그래서, 많은 가운데에 우리가받을거야
실제 사용에서 언어를 사용하여 데이터베이스
SQL은 우리가 쿼리 할 수​​있는 것처럼 그것과 우리는 사전에 수
데이터베이스 디자이너로 필드가 무엇인지 지정
가능성이있을 거라고 에 대한 질문이 그래서 사람들
MySQL이나 마이크로 소프트 나 오라클,에
누구든지 데이터베이스를 만들었습니다 당신이 사용하는 모든 작업을 수행 할 수 있습니다
의 노력의 파악, 확인,
이러한 IDS의 백만 없습니다.
우리는 어떻게 레이아웃 할 수 있습니다 - 메모리에 밖으로?
나무의 일종 아마도 구조,
그래서 그 때 당신이 실제로, 선택을 실행
그건 뭔가 로그 또는 로그
시간에 로그 대신의 실제로 치닫고 이상
선형 뭔가에.
그래서 우리는 많이 있어요 성능을 그런 식으로.
그리고 우리는 또한 더 많이 저장할 수 있습니다 데이터를 더 쉽게 'SQL의 원인
서버는 일반적으로 저장됩니다 RAM에도 불구하고 부품
의는 디스크에 저장 될 수 있습니다 당신은 아마 지금 쯤은 알고있다
즉 RAM은 일반적 디스크보다 빠르고,
그래서 좋은거야.
그리고 우리는 또한 처리 할 수​​ 있습니다 더 나은 동시성.
당신은 165 또는 161를 촬영 한 경우 당신이 알고있는 두 사람이 시도하는 경우
같은 일을하는 한 번 시스템에서,
나쁜 일들은 일반적으로 발생할 수 있습니다.
다른 기능들 때문에 우리 우리가 우리의 테이블을 디자인 할 경우 얻을 수있는
올바른 방법이있는 더 나은 지원 및 보안
그것은 동시성에 관해서.
그래서, 두 부분으로 두 사람
이를 이용한 세계 웹 사이트, 그들은 둘 다 시도하는 경우
동일한에서 뭔가를 구입하는 시간, 그 순서는 않을 것입니다
동시에에서 이동합니다.
어떻게 든 그들은 직렬화 할 것 우리 자신이 아닌 다른 누군가에 의해 -
자신 아닌 다른 사람.
데이터베이스의 뜻 우리를 위해 그렇게.
그래서 간단한 형태의 경우,
SQL은 우리에게 질의를 할 수 있습니다 관계형 데이터베이스.
관계형 데이터베이스 하나를 가지고 하나입니다
일반적으로 그것에 이상의 테이블.
그리고이 경우 조금 익숙하지 않은,
당신은 정말 그냥 생각할 수 이 엑셀 또는 숫자로
또는 Google 스프레드 시트.
그것은 단지 행과 열이 전형적으로 각각의 베스트
해당 행의 그것의 이름이 있습니다.
그래서이 ID 수 있습니다 열 이름 열,
등 주소란합니다.
그리고 당신은 여러 개있을 수 있습니다 같은 테이블에 당신이 원하는 경우
레이아웃 시작 상이한 유형의 데이터.
하지만 당신은 기억하고있을 적어도 우리가 시도 CS50에서
당신에게 GUI 기반을 제공하는 도구 [들림]
데이터베이스를 관리 할 수​​ 있습니다.
그것은 phpMyAdmin을 불렀다.
그래서 그것은 단지 우연의 일치가 그것은 PHP로 작성되었습니다, 정말,
하지만 그것은 단지 웹 기반이었다 앞 데이터베이스에 끝납니다.
그리고 여러 탭을 통해 링크, 당신은 시작할 수
데이터베이스를 구성 할 수 자신을 위해.
하지만 좋은 도구로 시작 좀 더 편안하게
또한 함께 명령 줄 클라이언트.
그래서, CS50 장비를 사용하는 경우 또는 실제로 어떤 매크로 PC를 사용하여
즉, 명령 줄 MySQL의가 클라이언트는, 당신은 또한 정렬 할 수 있습니다
이 같은 오래된 학교.
옆으로 MySQL의 프로젝트로서, 적어도 오픈 소스 버전
의 그것은 지금 MariaDB라고 당신이 읽을 수있는 여러 가지 이유
위키 백과에 올라 있지만, 동일한 소프트웨어의 정보,
그것은 동일한 구문의 정보 등,
거의 동일한 코드베이스.
그래서 나는이에있을 때 지금 상호 작용할 수있는 메시지를 표시
내 데이터베이스와 더 많은 수동.
포인트 그래서 경우, 내가 앞서 가자
그냥 열어 터미널 창.
나는 CS50를 사용하는 일이 가전​​ 그러나 당신은이 작업을 수행 할 수
대부분의 모든 시스템에 당신이 권리를 가지고있는
소프트웨어가 설치되어 있어야합니다.
그리고 MySQL은-U를 할거야 이름 존 하버드에 대한
이 특정 시스템에서,-P I 입력합니다 암호
조금 더의 안전하게 쳐서 입력합니다.
지금은 메시지가 있어요.
나는 진홍를 입력 할거야 CS50 어플라이언스에
지금은 기본적으로 참조 동일한 화면이.
그러나 이제 명령이있다 우리가 입력을 시작할 수 있습니다
같은 데이터베이스를 보여주고, 그 날 모두 표시 것
내가 가지고있는 데이터베이스의 이미,이 시스템에서 생성
거의 동일한 목록 당신은 phpMyAdmin을에서 볼 수있을 것입니다.
같은 다른 사람의 몇 가지의 정보 스키마 및 테스트,
당신은 어느 찔러 경우 CS50 어플라이언스는, 우리는 몇 가지를 숨길
이러한 낮은 수준의 테이블
하지만 그들은 봤는데 거기에 모든 시간.
MySQL은 실제로 낮은 수준이 사용자 이름과 같은 속성
데이터베이스의 암호 그 자체가 아닌 응용 프로그램에 대한
당신은 할 수 있음 그 위에 실행.
그래서 사전에, 오늘, I 두 데이터베이스를 생성,
중 하나라고합니다 courses50.
확률은 당신의 일부는 사용하고 있습니다 CS50 코스 쇼핑 도구,
에 대한 큰 인터페이스입니다 등록 기관의 교육 과정 소개.
그리고 이것은 실제로 좋은 원인 '에 대해 이야기하는 데이터 집합,
하나, 우리는 모든 종류의이야 과정에 명백하게 잘 알고
강사 및 회의 위치 및 모든 종류의
평범한 것들 대학,
그러나 그것은 또한 몇 가지 있어요 흥미로운 기회
디자인.
그래서 우리는 우리가 사용하는 줄 알았는데 물론 카탈로그의 개념
와 같은 쇼핑 도구 예를 정렬하는 오늘에 걸쳐
디자인의 일부 프레임 우리가 확인해야합니다 결정.
그래서이 시작하자.
실제로 싶다고 가정하자 슈퍼 간단한을 대표하는
물론 도구를 쇼핑.
그리고 간단한 세계 내가 상상할 수있는 하나입니다
코스가되는 강사가 있습니다.
그리고의가 가정하자 토론을 위해서
그 모든 과정 적어도 이름이 있습니다.
그럼 시작하자 이 스케치.
내가 phpMyAdmin을 사용하려고 해요 단지 편의를 위해,
그래서 우리는 밖으로 입력 할 필요가 없습니다 수동으로 모든 쿼리.
그러나 나는 여기에있어 내 courses50 데이터베이스.
이에 익숙하지 않은 경우, 거 당신이 다이빙을하면 아주 쉽게
자신의 프로젝트에 당신이 그것을 사용하려는 경우.
내가 만들거야 코스라는 테이블
나는 단지 생각할 수 하나의 필드의
지금, 코스의 이름입니다.
나는 앞서 갈 건데 말하자면 나에게 하나의 열을 제공합니다.
당신이 기억으로 지금, 당신이 얻을 조금보기의 인터페이스
이있다.
그리고 다른 거꾸로 솔직히 phpMyAdmin을하다 그것이 종류
자기 지시하는의 그 드롭 다운을 통해, 당신은 정렬 할 수 있습니다
어떤 당신의 가능한 참조 디자인 결정이다.
그래서 나는 줄거야 모든 코스의 이름.
즉,이 컬럼의 이름입니다.
어떻게 데이터 유형에 대한?
당신의 대부분은에 알고 있어야합니다 적어도 이러한 데이터 타입의 일부
이전의 경험에서.
적절한의 정보 물론 이름?
샤론?
>> 대 Varchar.
>> OK, VARCHAR하는 변수 숯불입니다.
그리고 무슨 일이 있는지 않습니다 기술적으로 의미?
[청취 비고]
OK. 그래서 문자열입니다.
그리고 VAR 측면 의 그것은 무엇을 의미?
변수입니다. 그러나 그 의미합니까?
그래?
[청취 비고]
정확히. 따라서 변수의 문자 수
문자열에있는 일부 최대.
그래서 여기에 우리의 첫 번째의 디자인 결정.
우리는 실제로 결정해야 바이트 수를 최대로
이러한 각각의 문자열에 할당.
일반적으로, 당신이 원하는 종류의, 너무 작은하지
너무 큰 만들 수 없습니다 '명백한 원인
너무 작은 경우에 당신은 그저 데이터를 잘라내는 시작하려고
당신은 정보를 잃게됩니다.
너무 큰의 경우에, 당신은 그저 종류의 데이터베이스를 말하고
기대하기에 더 많은 데이터를 최적화
실제로 이제까지 얻을 것보다.
그래서 적당한 느낌은 무엇인가 물론 이름에 숫자?
60? 좋아, 그럼 60.
즉, 꽤 합리적인 것
오래입니다 거기에 아무 그 예외.
아니 정말로있다 하드, 빠른 규칙.
대한, 솔직히 말해서 역사적인 이유로 많은
사람들이 255를 선택합니다 정렬했다 년 동안 원인
(8)를 사용하여 기본 최대 바이트 - 당신의 카운터 등의 8 비트.
나는 거라고보기 [들림] 2의 거듭 제곱을 사용할 수 있습니다
그러나 그것은 일종의 무관합니다.
그래서 우리는 60으로 갈 수 있습니다.
즉 합리적인 너무 오래 보인다
우리는 결국 그것을 후회하지 않는 '그 상한을 일으키는 원인.
이제 반대 가정 결정이 이뤄졌고,
변수가없는 문자 만 그냥 문자 필드.
그래서 C와 C + +, 문자는 달리 하나의 문자를 의미하지 않는다
및 데이터베이스이 일반적으로 고정 된 수를 의미
문자열에있는 문자.
무엇 상승 및 / 또는 것 제 60 선택의 단점
문자 필드, 대신 VARCHAR의?
이것이 바로 첫 번째 종류 결정을 당신이 확인해야합니다
중 [음성]을 검사 할 때 당신의 파트너와 프로젝트.
그래, 샤론 다시.
[청취 비고]
좋은. 그래서 이름이 적은 경우
60보다 당신은 낭비입니다 그 델타는 어떤
(60) 및 사이 실제 길이.
그래서 그냥 낭비 느낌 당신이 필요로하는 것보다 더 많은 바이트.
그러나 왜 존재 하는가?
확실히 일부 상승이있다.
그래?
[청취 비고]
확인합니다. 그래서 때로는 고정 번호를 알고 있습니다
10 자리 숫자와 같은 문자 예를 들어 전화 번호.
하지만 누가 왜 같은 관심 다만 어쨌든 11 말을하지
또는 왜 말을하지 (60) 어쨌든 VARCHAR와?
어떤 장점 우리는 어떻게해야합니까 알고 설계하여
고정 된 수의 문자?
[청취 비고]
당신이 바로 그 궤도에있어.
그래서 최적화지만 그래 - 정말의입니까?
[청취 비고]
OK. 좋은. 하자 초점 그 마지막 부분에.
그래서 인덱싱.
당신이 있다면 그것은 밝혀 미리 알고있는 모든
당신의 필드로 가고있다 60 자이어야합니다,
당신은 정말 생각할 수 있습니다 엑셀 데이터베이스 열
아주 똑바로 있으로 왼쪽 정렬
오른쪽 정당화 가장자리
때문에 모든 열 60 자 폭입니다.
그것은 즉,이 문자열은 60 자 거리
이 문자열에서, (60) 멀리이 하나의 문자
그리고 이것은이 하나.
때 그래서 그냥 좋아 C를 배운, 당신은 랜덤 액세스를했다
배열의 세계에서, 여기에 같은 생각.
당신의 열이 표시되는 경우 만 고정 길이 문자를 사용
당신은 효과적으로 인덱스 수 무작위로 60 또는 120 또는 180
당신은에서 개별적으로 얻을 수 있습니다 훨씬 더 빨리 문자열.
그런 경우 대신, 당신의 열이 있었다 말하자면 바로 왼쪽 가장자리
하지만 매우 견고 권리 열 가장자리
당신이 수 있기 때문에 10 문자가,
15 자, 5 자.
따라서이 역시 트레이드 오프입니다.
때로는 만 시행 착오를 통해
및 실험 당신은 알아낼 수
정말로 옳은 중 하지만 이러한 종류가있다
질문의 가야 겠어요
당신의 마음과 / 또는 통해 테이블 때 시간을 제공
데이터베이스를 디자인 할 수 있습니다.
따라서, 반드시 옳지 않아 대답하지만 당신은해야
적어도 일부를 가지고 마음에있는 문장이나 두 문장
백업에 어떤 당신이 만드는 결정.
괜찮아요.
그럼 스크롤을 계속하자 여기의 지시에
그 phpMyAdmin을의 UI입니다.
따라서,에 대한 기본값 이름은 내가 지정해야
그것은이되어야한다고 기본값은 NULL 값?
당신은 어떻게 생각하세요?
물론이 널 (null) 이름을 할 수 있습니까?
바로, 이상한 느낌?
어떤 생각할 수 없다 하버드에서 이름없는 과정.
그리고 아마도 몇 가지있다 애매한 케이스
과정은 다수에게 주어진다
과 교수는 않았습니다 그것의 이름을 선택하지만 -
나는 그와 함께 지옥에, 의미,
등의조차하자 그 지원 귀찮게.
나는 이익을 말할 것 좋은 깨끗한 데이터베이스,
의가 지정할 수 할 수 없기 때문에 기본값은 NULL 값이 있습니다.
또한, 우리는 할 수 제목 물론 같은
와 달리하지 않은 맥 OS와 윈도우 할
당신은을 만들 때 예를 들어 폴더,
하지만이 있습니다 좀 더 의미
인간은 무언가를 볼 수 있도록.
우리에 대해 얘기 백 엔드 데이터베이스 아마도
물론 카탈로그.
그래서 나는 정말 그렇게 할 을주는 아이디어 등
제목 물론 이름에
그건 정말 아니다 이후 사람을 도움이 될 것.
그래서이 없음으로 이것을두고 보자, 이는 삽입 할 때 의미합니다
이 데이터베이스에, 당신은이 모든 코스의 이름을 지정합니다
조금 느끼는 나에게 청소기.
괜찮아요.
그래서, 추가 데이터 정렬을 스크롤.
이것은 단지 함께 할 수있다 문자 세트 및 이것 저것
당신은 지금까지 본 적이 있다면 스웨덴어 언급
phpMyAdmin에있는 그의 '국민의 원인
누가 phpMyAdmin을 썼다 스웨덴이었다.
즉, PHP 또는 그것의 MySQL입니까?
두 가지 중 하나, I 즉석 잊어 버렸습니다.
그러나 그것은 역사적인 이유에의
그러나 당신은 모든을 표현할 수 영어 문자
당신은 스웨덴어 할 수 그 그래서 대부분 아닌 문제입니다.
CS50 어플라이언스는 생각입니다 사용 - UTF-8을 사용하도록 구성된,
그래서 일반적으로해야 당신을 위해 팝업 없습니다.
속성.
따라서 이들 중 어느 것도 없습니다 여기 정말 관련.
나는 이진, 부호를 볼 서명되지 않은 ZEROFILL,
업데이트 현재 타임 스탬프에.
해당 필드에만 적용 일부 숫자 필드
또는 시간 필드.
그래서 우리는 건너 뛸 수 있습니다 그 완전히.
널 (null). 이 필드는 NULL이 될 수 있습니다?
그래서 더. 우리는 이미 대화의 종류.
그래서 우리는 원하지 않는 기본값.
우리는 널 (null)이 될 싶지 않아.
어떤 인덱스에 대한?
여기에 네 가지 선택이있다.
우리가 지정하는 경우, 그것은 무엇을 의미 하는가
이 행이가는 것을 기본 키가?
다시 CS50 또는 생각 당신이 그것을 촬영 한 경우 CS165.
[청취 비고]
정확히. 따라서 기본 키 정의에 의해 현장입니다
그 고유 식별 이 테이블의 각 행.
그리고 당신은 어떻게 그것에 의존 할 수 그 고유 식별.
그래서, 그것은 무엇을 의미합니까 그럼 그냥 고유해야 하는가?
음, 종류의 이러한 두 종류가 있습니다
의 의미에서 후드 아래에.
그러나 일반적으로, 기본 키는 당신이 만드는 계약의 종류
데이터베이스 것으로.
나는 쿼리를 수행 할 때 코스를 찾고,
나는 이것을 사용하려고 해요 특정 필드.
그리고 우리는 다시 올 것이다 우리는이 이유를 두 가지
여기에 같은 선택, 기본 또는 고유.
독특한 그냥이 말한다 필드는 고유 한 것입니다
하지만 난 정말하지 않을 겁니다 여기에 구두 약속 종류
해당 필드를 사용하는 내 검색을 수행합니다
우리는거야 이유 단지 순간을 참조하십시오.
우리는 대신 인덱스를 지정하는 경우, 무엇 지정을 의미 하는가
필드에는 인덱스가 있는지?
그래?
[청취 비고]
정확히. 그것은되었습니다 쿼리에 대한 최적화.
그래서 - 데이터베이스 서버, 오라클, MySQL은, 무엇이든,
일반적으로 마법을 작동합니다 뒤에서 당신은 클릭 한 번
해당 옵션을 클릭 저장하고 빌드합니다
업 전형적 트리 구조 B-트리가 본 적이 있다면
또는 어떤 오프 들어 매우 짧은 한 나무
그것은 당신에게 아주 좋은를 제공 로그 등록
데이터를 검색 할 때.
당신은 인덱스를 지정하지 않는 경우 필드에 어떤 일이 일어나고
실행해야 검색 시간
임의의에 대한 [음성] 과정 이름은?
그게 뭐야?
[청취 비고]
아, [청취], 선형, 오른쪽?
그것은 더 최적화가없는 경우 데이터베이스에 여유
당신은 생각하지 않은 데이터베이스 종류
기대하는 데이터의.
당신이 할 수있는 최선은 확인하는 것입니다 당신이 찾고있는 모든 것을
일부 값, 특히 경우가 있었다
사실 중복합니다.
전체 텍스트 사이에, 우리는거야 지금 우리의 손을 흔들어.
그러나 일반적으로,이는 당신에게 허용 인덱스의 유형
키워드에 대한 최적화 필드를 검색합니다.
그래서이 될 수 있습니다 좋은 후보
에 대한 교육 과정 설명 등 당신은 몇 가지가있을 수 있습니다 곳
단락 및 수도의 문자열 경기를하고 싶다.
전체 텍스트는 일반적으로 드릴 것입니다 당신은 매우 효율적으로 그렇게.
AI는이 끔찍한 일종이다 설명하지만, 우리가 놓으면
그것을 통해 당신은 볼 것이다 자동 증가.
해당 사항 없음 모두 여기에 하지만 자동 증가에 유용합니다
INT의 필드와 같은 때문에위한 데이터베이스가 처리됩니다
플러스 PLUSING의 과정 그것은 당신이 삽입을 할 때마다.
이 없더라도 이명 말 그대로 제출을 클릭합니다
동시에 시도 어떻게 든 행을 만들 수 있습니다
데이터베이스 중 하나 그들은 수 I를 얻을 것이다
다른 사람은 얻을 것이다 숫자 I 플러스 일.
당신은 걱정할 필요가 없습니다
약 두 숫자 인 당신이 인 경우에 동일하게 할당
코드에서이 직접 할 수 있습니다.
괜찮아요.
그래서 나는 종류의 좋아하는 곳 우리는 될 수있는 이름을 가지고있다.
그래서 저장을 클릭하자.
이것은 좋은 디자인입니다 데이터베이스 테이블에 대한?
그리고 옆으로 마치 SQL 녹슨하거나 정렬
단지 항상 블라인드를 돌려 무슨 일이 있었는지에 눈,
내가 입력 한 수 정확히 -
그에서 그 세 라인 검은 색과 흰색 프롬프트
명령 줄에서 클라이언트 또는 나는 할 수 있었다
코드에서 프로그래밍이.
그래서 모든 phpMyAdmin을은을 위해 일한다 나를, 나 한테 노력을 저장
때로는 기억의 구문과 위해 입력
지루한 명령 등을들 수있다.
괜찮아요.
그래서이 기분하지 않습니다 최고의 디자인, 하나의 필드 테이블.
이제 우리는이 수 교수 같은 것들
및 위치 및 설명.
하지만 그렇다하더라도, 단지 이름을 사용하여
과정을 확인하는 이상적인 생각하지 않습니다.
일반적으로 어떤이 우리가 과거에 행해진
당신은 데이터베이스를 사용한 경우 고유 행에?
일반적으로 VARCHAR를 사용하지 않습니다.
그래?
[청취 비고]
그래. 그래서 일반적으로 코스 ID.
따라서, 가장 일반적인 여기에 접근 특히
프레임 워크를 사용하는 경우 다만 실제로
정수와 같은 번호를 사용합니다.
그래서 내가 가서이 작업을 수행 할 수 있습니다.
그리고 우리는 몇 가지에서이 작업을 수행 할 수 있습니다 난을 확대하는 경우 방법, 예고
여기에 바닥에있다.
나는 하나를 추가 말할거야 표 끝에 열
일반적으로 단지 시각에 대한 편의 당신은 ID를 넣어
테이블의 시작 부분에 이것은 실제가없는 경우에도
기능에 미치는 영향.
그래서 내가 말할거야 하나의 열을 추가
테이블의 시작 부분에.
난 갈 것을 클릭거야 여기에 저에게이 UI를 다시 제공합니다.
의이 ID를 부르 자.
우리는 우리가해야 할 것입니다 생각하는 경우 더 이상 4 백만 과정을 수행하지
INT의 필드는 괜찮습니다.
우리는 심지어 그것을 아래로 축소 할 수
그러나 공간이 싸다 그래서 사람들이 정말 관심.
그러나, 우리는에 노력하고 지금 페이스 북 쓰기
나쁜 일이되지 않을 수도 있습니다 큰 정수를 예상하는
우리에게 64 비트 정수를 줄 것이다하는
하지만 당신은 말 그대로입니다 비트의 수를 배증
당신이 사용하고 있는지, 그래서 약간의 절충
하지만 뭔가 고려해야한다.
이제,이 혼란 기존의 것.
당신은 기억 수도 있습니다 MySQL을 사용에서
당신은 int를 선언한다 언제 필드는 종종 숫자를 볼 수 있습니다
숫자 10처럼 그 옆에.
그것은 함께 할 수 없다 숫자의 크기
또는 비트의 수.
즉, 숫자로 할 수있다 사용되는 문자
표시를 시각적으로 이 INT 필드
터미널 창을 사용하는 경우.
그래서 우리는 순간에 그것을 볼 수 있습니다.
그래서, 오해하지 마세요 번호를 입력하여
거기는 비록에 효과적으로 저희 요청
여기에 하나.
여기에, 내가 갈거야 가서 서명 말한다.
폐기물에 대한 이유가 없습니다 우리의 음수의 모든
이후 데이터베이스 일반적으로 예정
긍정적 인 가정 값 또는 널 (null).
ID 확실히 null이 아니어야합니다.
그리고 당신에 대해 어떻게 생각하십니까 이 ID 필드 인덱스?
의 그것이 기본합시다.
그래서, 만약, 그래도 좋아, 난 할 수있어 하나의 CS164 코스 생각
하버드에서 단 하나의 하버드 CS50 코스
그 예쁜의 많은 사실 전체
예외는 어쩌면이 있다는 것을 [청취] 학기 모두
또는 그런 뭔가 이상한.
그러나 더 근본적으로, 왜 더 나은
에 숫자 정수 ID를 사용하는 고유의 과정을 확인하지 않고
다만 고유 한 문자열보다?
그래?
[청취 비고]
OK, 흥미.
우리는 종류의했다 그렇다면 코스 교차 상장.
그래서 그 좋은 예입니다.
나는 하실지 모르겠지만 그 그래도 해결
그들에게 동일하게 제공하여 ID 번호가가의 경우
당신은 그와 함께 어디로 가고 있는지.
아니? OK. 그러나 확실히 고려하는 코너 케이스.
정렬이있는 경우 -은 우리는 어떤 종류의 필요
잠재적 앨리어싱.
[청취 비고]
확인합니다.
[청취 비고]
그 좋은 예이다.
이름에 변경 될 수 있습니다 시간, 완전히 합리적인.
다른 건?
[청취 비고]
죄송합니다, 다시 말한다.
[청취 비고]
네, 맞아요.
그래서 정말, 그건 실제 클린 처는
32 비트 INT를 사용하는 것을 아마 더 빨리 될 것
어떤 변수보다 길이 문자 필드.
첫 번째 경우, 깡통에게있는 말 그대로, 레지스터에 맞는
많이 언급하지 않기 작은 메모리 풋 프린트.
후자의 경우에, 당신은거야 리조트를해야하는 [음성]
문자열 비교에있는 자신의 선형과
의 크기 잠재적으로 문자열입니다.
그래서, 그냥 좋다 최적화,
특히 돼가
우리라는 것을 할 수 있도록하는 보다 효율적으로 조인
다만 순간.
그럼 그렇게합시다.
우리는 지정할 수 있습니다 그 이 기본입니다
내가하지 특히​​ 않기 때문에 신경이나 생각하고 싶지
어떤 수에 대한 물론입니다.
그들에 보자 그들이 원하는 값.
나는 자동 증가를 말하는거야 그래서 그 내용을 외부에서 조달 할 수 있습니다.
할 수도 있고 옆에있는로 알고 하버드
적어도 고유 가지고 코스 번호.
난 아무 기억이 없다 이 과정은 무엇인지.
내가 알고 CS50 년대 그 카탈로그 번호는 4949입니다
완전히 임의의.
그러나 이상한있다 점에서 코너의 경우에도
registrarial 덤프 물론 카탈로그 데이터,
이전 때로는 코스, 코스는 4와 같은 번호가 있습니다.
그러나 기술적으로 그 필드는 문자 필드
즉, 단순히 0004로 시작합니다.
그래서 여기에 너무, 당신은해야 구별에주의
같은 것들 사이 물론 카탈로그 번호
어떤 사람이있을 수있는 고정 길이, 0004의 개념,
당신은 저장 안 그 정수의 예를 들어.
필드의 종류해야 다른 곳에 저장 될 수있다.
그래서 하버드에서, 우리는라면 실제로 코스를 만들기
쇼핑 도구, 그것의 아마 충분하지
수 과정에 단지 1, 2, 3, 4.
우리는 아마 할 겁니다
다른 필드를 가질 카탈로그 번호라고,
그 또한 예상되는 기반 고유해야합니다
여기에 인간의 규칙에 하지만 최선의 선택이 아니다
고유 식별자에 대한 때문에 그것은 가변 길이 될 수 있습니다.
그것은 네하지 않을 수 있습니다 문자는, 그 다섯 수 있습니다.
사실, 생각 몇 가지 년 전 그들은 이동
이 다섯 캐릭터의 원인 999 개 이상의 코스가 있었다
총이나 뭐 같은 그, 또는 9,999 코스.
그래서, 그 예가 될 수 있습니다 필드는 기본하지 않은
하지만 고유해야합니다.
그리고 이메일 주소 또 다른 하나입니다.
당신은 고유 할 수 있습니다
그러나 반드시 기본 키.
괜찮아요.
그래서 나는 다른을 강타하자 이보다 더 빠르게 테이블.
그래서이 한테 전화해서 한 강사와 나는거야
이에게 총을주고 두 열 수.
나는 배우라고 내 마지막 시간의 수업입니다.
내가 전화하려고 해요 첫 번째 열 ID입니다.
내가 전화하려고 해요 두 번째 열 이름입니다.
또한 대 Varchar를 할거야.
내가없는 것 같은데요 교수는 더 이상 이름이
60 자 이상, 비록 지금이 밀어 수 있습니다
일부 긴 이름, 특수와 중간 이름을 가진 사람.
오늘은 괜찮아요.
그럼 여기에 스크롤 할 수 있습니다.
다시 한 번이 서명합시다.
의이 차를 만들어 보자.
그리고 우리는 중복 된 이름이 허용됩니다
경우에 두 개의 존이있다 스미스의 또는 그런 일.
그리고 지금 우리는 두 개의 테이블이 있습니다.
그래서 지금,이 구걸 내가 연관 어떻게 질문
코스 강사에?
나는 종류의 느낌 자신보다 앞서있어
때문에 경우 강사 과정을 가르치고,
내 첫 번째 본능 것 실제로 돌아갈 수
과정이에게 실현에 좋은 생각이 아니었다.
내가 실제로 하나의 열을 추가 할 수 테이블의 끝에
이동을 클릭, 나는거야 이 강사를 호출합니다.
그리고이 VARCHAR를 만들거야 나는이 60 만들 수 있습니다.
그리고 어쩌면 내가 지금 널 (null)을 떠날거야
경우에 물론이되지 않았습니다 강사 서명되지 않은 한
때로는하기 전에 발생하는 장기 저장을 시작하고 클릭합니다.
이러한 디자인의 어떤 당신이 선호합니까?에게
우리가 첫 번째 별도의 강사의 테이블
또는 두 번째 어디서 단지 과정에 필드를 추가?
그래서 밀접하게 링크의 코스 강사.
[청취 비고]
OK. 좋은. 그러나 나를 뒤로 밀어 보자.
이 같은 내가 할 수있는 너무 간단 단지 그 사람의 이름을 입력
이 테이블에, 반드시 같은 그 어떤 값을 갖거나 -?
[청취 비고]
괜찮아요.
글쎄, 내가 여기 어려울 수 있습니다.
그래서 내가 말을하자 그 이 과정은 CS51입니다
나는 그것을 가르쳐 줄 알아 둘이서 올해.
그래서, 헨리 라이트 너 이새 토브 만 -
그래서 난 그냥 쉼표를 넣을 수 있습니다 둘 사이에 오른쪽.
나는 아주 잘하는데 ... 작년부터 CSV.
[청취 비고]
맞아, 맞아.
최대한 빨리 리조트로 이 같은 것으로,
어느 느​​낄 수 있습니다 합리적이고 당신은 느낄 수 있습니다
등이이 종류의 스마트입니다.
나는 종류 중 하나를 빌려 줘요 잘 작동하는 것입니다 생각,
새로운 아이디어를 빌려 종류의 그들을 결합.
당신은 종류의 완전히 격파하고 데이터베이스를 사용하는 점
처음 '원인에 만약 값 중 하나
사용하는 그것은 빠른 검색을하다 때문에 다양한 인덱스
와 테이블이 있습니다 당신을 위해 구축 될
데이터베이스 엔진 자체.
자, 당신은 검색 할 경우 코스의
제시가 가르치는 것을, 지금 당신은이 모두에 일치하는 부분 문자열을 수행하는
강사 필드,
어느 효과적으로 선형을 의미 당신이 원인 '다시 검색
이 임의의 집합을 찾을 수 세 문자 어디의
앞에 강사 필드에
아마 다음 내 쉼표 (,)로.
그래서이 확실히 잘 징조하지 않습니다.
그래서 저 테이블로 다시 가자.
나에 앞서 가자 코스는, 그 취소.
난 그냥 갈거야 앞서 해당 필드를 놓습니다.
그리고 당신은 원하는 경우 수동으로 수행,
구문은 ALTER 테이블입니다 과정은 강사를 삭제합니다.
그래서 앞서 가자 그에게 네 말한다.
그리고이 이전 아이디어로 돌아가
제가가 본 곳 강사를위한 테이블.
하지만 지금은 조금 느낌 같은 난 코스를 넣을 수 있습니다
과정의 테이블에 강사
강사의 테이블 만 어떻게 든 둘을 연결해야합니다.
그리고 어떻게 것 우리는 그렇게 할 것을 제안?에게
[청취 비고]
좋은. 그럼 그렇게합시다.
그리고 당신이 부를 수 이론 아무것도 표.
나는 의도적으로 갈거야 얼마나 많은 호출
프레임 워크의 것 호출, 그 (것)들의 사이에서,
당신이 비트에 볼 수 있습니다로 Laravel.
나는 물론 전화거야 강사를 강조한다.
이 단수를 사용하여 단어의 각 경우
모든 소문자 다시, 또한 함께 -
다음 순 왼쪽에서 오른쪽으로 정렬.
이것은 완전히 임의 있지만 그 협약 해지는 경향
이러한 프레임 워크를 많이 다른 언어 PHP에서.
나는 얼마나 많은 열을 필요로 이 우리가 테이블을 조인 호출하면,
두 개의 다른 합류 함께 테이블?
세 개의 열?
어느 - 그들이 무엇을 할 것인가?
[청취 비고]
OK. 좋은. 그 작동합니다.
그리고 우리는 기술적으로 할 수 여기에 모서리 만 많이 잘라
특히 프레임 워크 여전히도 이러한 행을 줄 것이다
고유 ID 비록 의미 적으로 행
우리가 정말 걱정하거나 우리가 정말 걱정하는 열
약 후자의 두 가지가 있습니다 당신이 말,이 과정은 ID
및 강사의 ID.
그래서이 작업을 수행 할 수 있습니다.
나는,이 행 그냥 ID를 부를 것 우리는 이전에 그랬던 것처럼.
하지만 난거야이 하나 코스 ID를 호출합니다.
내가 갈거야이 하나 강사의 ID를 호출합니다.
그리고 난 갈거야 모든 지정
그들의 서명되지 않은 '내가 원하는 유발
제 4 극대화 억 INT 범위.
그들 중 누구도 널 (null)이어야한다.
내가 지정된다는 말 ID는 여전히 기본이 될 것이다.
그리고 또,이는 단지 컨벤션,
프레임 워크의 많은 당신은 정렬되지 않은 경우에도
근본적으로 필요 행에 대한 고유 식별자
그것은에 대한 편리한 밝혀 코드, 무슨 SQL
자동으로 할 우리를 위해 생성.
그래서 기본으로 그 떠날거야.
그러나 지금, 나는 종류의 디자인 결정이,
물론 ID와 강사의 ID.
어떤 인덱스 (있는 경우) 그들은 가야?
나는 어떤 인덱스를 떠나지 않을 것입니다 경우, 의미는 무엇입니까?
이전과 성능, 오른쪽?
인덱스가 없으면 당신이 할 수있는 최선의 종류
의 [청취]를 통해 숫자를 찾고 모든 일.
그래서 스마트 생각하지 않습니다.
그것은 기본이 될해야합니까?
그럼 왜하지?
왜 차?
[청취 비고]
완벽한. 그래서 우리는 롤 중 [음성] 차.
우리는 이미 선택했습니다.
그래서, 그것은 고유해야합니다?
[청취 비고]
좋은. 따라서, 경우에 당신은 가정 물론 당 하나의 강사,
완전히 좋아.
그것은 확실히이다 일반적인 경우
그러나 우리는 이미 하나를 넣어 아마도 익숙한 예.
CS51 두 강사를 얻었다 그래서 우리는 종류입니다
지금이 경우 나사.
우리는 허용 한 경우에만 한 강사,
우리는 실제로 방법을 할 수있는 모두 테이블을 조인과 함께
이전 방식으로 돌아가
그 사람의 이름에게하지 넣어 아마도하지만 강사의 ID.
당신은 단지 모든 과정을 알고있는 경우 한 강사가있을 수 있습니다 단지
하나의 열.
그러나 변화는 어떤 문제가 우리를 얻었다.
괜찮아요.
그래서, 그것은 고유해야합니다?
호 전체 텍스트하지 않습니다 해당 느낀다.
그건 전에 우리가 말했듯이
같은 문자열에 대한 에 대한 설명과 일치.
그래서 인덱스에 대한?
음, 지수는 아마도 우리의 가장 좋은 후보
MySQL의 최적화를 알려줍니다 여기에 검색을위한
또는 저 정교하게, 검색 최적화 또는 조인
우리는 단지 잠시 살펴 보 겠지만
그들이있어되도록 좀 더 효율적으로
순수 선형 무엇보다.
나는 자동 것을 선택하세요 이 필드를 증가?
그래서 아니, 때문에 진정한 부모 요소가 존재
과정 '테이블.
그것의 곳이다 플러스 얻을 것,
게다가 그것은 사실의 때 삽입.
여기,이 모든 것입니다 수동으로 삽입 할
우리 아마 코드로.
그럼 간단하게 지정할 수 있습니다 그 과정 ID 모두
강사의 ID 인덱스가 있습니다.
이제 우리는 가서 절약 할 수 있습니다.
그리고 지금, 단지 보여 당신의 대응
좋은 무슨 사이 GUI 친화적 인 인터페이스
명령 줄 인터페이스를 제공합니다.
내가 가서하자 이 MySQL의 프롬프트에서 다음.
내가 사용 courses50 말할거야
임의의 이름하는 것입니다 나는이 데이터베이스로했다.
그리고 지금, 난하지 않습니다 우리가 한 일을 기억한다.
그래서 내가 쇼 테이블을 입력하자
일반적으로 세미콜론 여기에 당신의 친구가 될 것입니다
쿼리를 완료합니다.
그리고 거기입니다.
그래서 여기에 오히려 행 또는은 우리가 여기있는 테이블.
지금, 나는 잊지 무엇 과정은 같습니다
그래서 나는 과정을 설명합니까하자 지금은 일종의 ASCII를 참조하십시오
또는 어떤 버전 phpMyAdmin에이 일을했다
나는 ID가 INT입니다 것을 볼 수 있습니다.
그 10이 있습니다.
이것은 무엇을 의미할까요?
그건 그냥 의미는의 경우 그것은 걸릴 것 표시
10 자 최대 터미널 창.
는 널 (NULL)?
호 이는 기본 키입니다.
이것은 디폴트 값을 가질 수?
특별한 번호 및 추가 자동 증가와 같은 플래그.
그래서 그냥 몇하자 여기에 신속하게 삽입.
나는 올라갈거야 에 - 그냥 가정 해 봅시다.
의 슬라이드에 상태를 변경할 수 있습니다
나는이 종류의 위치를​​ 미리 준비 이.
이 요약 다음 중입니다 해당 테이블의 세.
이미 단지 수동으로 첫 번째 명령을 입력했습니다.
그리고 여기, 내가 나서서 당신을 위해 다른 사람을 입력합니다.
이것은 단지 문체 것.
일반적으로, 많은 사람들 모두 대문자 SQL 문을 입력
다음 테이블 이름과 소문자 필드 이름,
경우에만 때문에 스탠드 종류
당신의 용어에 뭐가 있는지 데이터베이스 구문은 무엇입니까.
그래서 여기에 우리는 세 가지가 테이블, 과정, 강사,
과 과정 강사.
슬라이드에서 나는, 사전에 나는 ID 필드를 가지고 있지 않은
하지만 그건 사실이 아니에요 전혀 나쁜 일이.
우리는 단지 볼 수있을 것입니다 이 세 번째 열.
여기 그 짓을했다?
그래서 지금 내가 제안하자 그 우리는 삽입의 무리를 않습니다.
그래서 여기에 몇 가지 자료입니다, 나는 확대합니다
그래서 내가 제안하는거야 과정에있는 그,
우리는 세 가지 과정을 다룬다.
그리고이 세 가지를 선택 '그들이받은 대리인 원인
일부 니스 - 자신이 갖고있는 몇 가지 좋은 특성.
CS1, CS50, CS51, 그들은 증가하는 ID가
하지만 ID 무엇입니다 전혀 관계가 없습니다.
그건 그냥 순서의 한 그들은 나에 의해 자동으로 삽입되었다.
어떻게 강사에 대한?
그래서 지금, 때문에 헨리 라이트 너 , CS1과 CS51을 모두 가르친다
이 좋은 기회의 일종이다 우리의 디자인에 대한 의미.
그리고 제시 CS51을 가르치고 마란은 CS50을 가르치고 있습니다.
그래서 지금 - 또는 오히려 이들은 단지 그 사람의 고유 ID.
그리고 교육 과정과 강사 - 물론 강사, 여기에 알 수 있습니다.
코스 ID1, 어떤 CS1은 가르쳐했다
강사 ID1에 의해 헨리는 사람입니다.
코스 ID2, 어느 I CS50가 배운 것 같아요
강사 ID2,로 마란가되는 것입니다.
그리고 마지막으로, CS51, 그리고 우리는 두 개의 행을 확인할 수 있습니다.
가입 이유 지금은 표 가르쳐 강력
헨리와 제시 모두에 의해.
그래서이 모든 벌금과 좋은
그러나 나는 거의 할 수 위에 떨어져 기억
내 머리 누가 누가 여기에있다.
어떻게하면 가능 코드에서 해당 거래,
하지 않고 하드 코드 일?
음,이 곳 SQL 자체 우리의 친구가 시작합니다.
그리고 제안하는거야 그 우리는 다음을 입력 할 수 있습니다.
나는시이 작업을 수행 할 수 있습니다 실제 프롬프트.
내가 가서하자 이런 일을 삽입합니다.
따라서, 과정 테이블에 이제 우리가 가진 정확히하자
전 순간.
나는 앞서에 가서 말을 해요 의는 CS1과 CS50를 삽입 할 수 있습니다.
의 몇 가지 더 삽입하자 행을 한 번에, CS51.
이제, 내가 가서 저장할 수 있습니다.
좋아, 그래서 난 그냥 빨리 다시
내가 관계 할 수있는 우리는 단지 화면에 보았다.
그리고 여기에서 우리는이 라이트 너, 우리가 마란있다.
의 자신을 드리겠습니다 다른 행 및 토브.
이제 날이를 저장할 수 있습니다.
그리고 의도적으로 그 일을 해요 동일한 순서로.
아니, 제공하는 것을 잊었다 이 자동 증가.
내가 빨리이 문제를 해결하자.
나는이 문제를 해결합니다 온라인 코드입니다.
그 옆으로 실패했습니다.
사실 난 못해 주는데 라이트 너 마란 삽입
내가하지 않았다 때문에 토브는 실패 비록 ID 번호를 지정
그것은 하나의 내가 기대하고 있어요 자동 증가를 확인하는 것을 잊었다,
이는 그들이 모든 것을 의미했다 기본값은 제로하는 방법을 사용합니다.
그러나 다음과 모순되는 우리가 지정한 속성입니다.
기본 키 위반했다 그래서 심지어 나 그것을 할 수 있도록하지 않았다.
그래서 내가이 문제를 해결 할 수 있습니다.
이제, 나를 다시 가자 여기에 탭을 삽입하고 지정
나는 라이트 너, 마란를 원하는 그리고, 또 하나의 행, 토브.
그리고 지금 마지막으로, 만 조금 어려운 하나
기억하는 것은 물론입니다 강사.
의 지금 삽입하자 그 물론 ID1 강사 ID1입니다
그래서 CS1과 헨리입니다.
코스 ID2 강사입니다 CS50과 마란입니다 ID2.
그리고 우리가 가지고있는 마지막 사람 걱정하는 것은 물론 ID3입니다
CS51, 이는 진행됩니다
코스 강사 1, 헨리이다.
그리고 셋째는 또한 가르쳐 (3)에 의해, 토브가되는 것입니다.
그래서 잘하면 지금 우리는 이것을 다시했습니다 -
젠장, 나도 같은 일을했다.
코스 강사 자동 증가를 필요로한다.
괜찮아요.
나는이 빨리이 시간을 다하겠습니다 물론 하나, 물론 1, 2, 2.
그리고 지금 마지막으로, 우리는 CS51을 이는 물론 ID3 헨리 있습니다.
물론 ID3 및 제시.
즉, 좋아 보인다.
OK. 이제, 그만 돌아가요! 터미널 창에.
나는 설명이 경우 과정은 우리는이를 볼 수 있습니다.
내가 할 수있는 과정을보고 싶다면 지금, 과목 별 선택 할
세미콜론, 그리고 지금 우리는 그 값을 참조하십시오.
그리고 지금, 어떤 다른 내가하고 싶은합니까?
강사에서 별을 선택, 내가 예상대로입니다,
및 과목 별 선택 - 물론 밑줄 강사.
어떻게 지금 가입 않습니다 이 테이블?
그래서 선택하는 데의 아름다움 이것에 의해 ID 값은
당신이 생각하는 경우 물론 테이블을 가지고
및 강사 다음 테이블 삽입
당신의 그 두 사이에 마음 과정 강사
당신이 종류의 줄 수있는 테이블 이러한 ID의 모든 열까지
당신이로 병합하도록 모두가 하나의 거대한 열
정보 우리는 걱정한다.
이것에 대한 SQL 구문 반드시 명확하지 않다
하지만 우리가 그것을 할 수 있는지 보자.
과정에서 그래서 선택 스타,
그리고 몇 가지 방법이있다 우리는이 작업을 수행 할 수 있습니다로.
난 단지에 입력을 칠거야 잘 형식 물건 종류,
하지만 화살은 (는) 클라이언트 측 도구의 증상
그것은 아무 상관이있다 SQL 자체 않습니다.
과정에서 그래서 선택 스타.
지금 가입거야 과정 테이블
물론 강사 테이블에.
어떻게? 라는 필드에 courses.id 동등 과정
강사 강조 이름이 무엇 점
해당 필드의 여기에 내가 몇 가지를 원하는.
그것은 ID 아니다.
그게 ... - 뭐, 뭐라고?
>> 코스 ID.
OK, 저를 축소 할 수 있습니다.
하지만 먹고 싶어 한 단계 더 나아가서.
지금이 짓을했는지 테이블이 하나.
지금은 뽑아 줘 뿐만 아니라이 남자.
그래서 더 받고 이 모든 일에 참여
강사의에 무슨 표?
코스 밑줄 instructor.instructor 아이디
instructors.id을 같게.
그래서 우리는 쓸 수 몇 가지 방법이 쿼리.
내가 이런 짓을하는 순서 모든 중요하지 않습니다.
난 그냥 종류의에 한 에서 내 마음은 왼쪽에서 오른쪽으로.
우리는이 작업을 할 수 있었다 몇 가지 다른 방법으로
하지만 지금이있는 경우 세미콜론를 입력하고 Enter 키를 누르십시오,
나는 새를 다시 얻을 통지 할 임시 테이블 결과 집합
그래서 데이터베이스의 이야기로 이야기합니다.
그리고 내가 무엇을해야합니까 이 일에?
나는 ID, 이름, 서로가 종류의 혼란 ID,
순간 나에게, 코스 ID,
강사의 ID, ID, 이름.
그래서, 일의 끝에 우리는 지금 올바른 데이터가 있습니다.
나는 CS1이 배운 것을 볼 수 있습니다 라이트 너에 의해, CS51가 진행됩니다
라이트 너 및 토브, 그리고로 CS50은 마란에 의해 진행된다.
하지만 난에 대해 조금 긴장 내가 만든이 모호함.
모호함은 무엇입니까 난을 언급하고있어?
그래?
[청취 비고]
세 개의 ID 열이있다.
그래서 우리는 실제로이 문제를 해결 할 수 있습니다 우리는 실제로가는거야
우리의 프레임 워크로 연기 궁극적으로이 우리를 돕기 위해,
하지만이 있다는 것을 밝혀 S라는 SQL의 키워드,
당신을 지정할 수있는 별명 필드의 새 이름
우리는이 문제를 방지 할 수 있도록 모두 모호함.
그러나 실현 우리가하지 않으면 에서와 같이 어떻게 든 해결
해당 키워드 또는 프레임 워크,
이 가능성이있다 모호함 당신이 시도하는 경우
ID 필드를 액세스 할 분명히 사람이 있기 때문에
거기에 중복 된 이름.
그래서이 참여하고 나는 생각한다 당신의 마음의 눈에 가장 좋은 방법
정말 그것에 대해 생각 두 테이블을하는 것입니다,
그들을 줄 당신이 원하는 방법.
그리고 이것은 소위 내부는 의미에서 참여
우리는 결합하고 있는지 여기에 테이블.
다른 종류의가 있습니다 우리는 발생할 수있는 조인
같은 시간이 지남에 따라 외부는 조인
하지만 대부분의 경우 아마도 가장 일반적인
데이터를 재구성.
지금 우리가 수행 한 것은 일반적으로 무엇이라고
데이터를 정규화, 그 때문에 어디에도 중복이 없다
테이블에.
그리고 중복으로 나는 것 그 첫 번째 방법을 의미했다.
우리는 라이트 너 언급 한 경우 여러 장소에서 토브
데이터베이스에 문제가 아닙니다 일반적으로 최선의 결정
특히 경우에 자신의 이름 힘 초과하거나 경우에 변경
결혼, 결혼 전 이름 세력의 당신이 하나를 원하는 자체를 변경
일부 표준 장소 이름과 같은 데이터 값.
괜찮아요.
그래서 정리하자면, 우리는 했어 수 있도록 몇 가지 디자인 결정
가장 중요한 것 아마 감소
인덱스의 이러한 선택의.
그러나 내가 지적하자 한 가지뿐.
나는 다시 phpMyAdmin을로 이동합니다
하나의 기능을 당신은 그렇지 않습니다 앞에있는 발생했습니다
다음.
나는 물론 강사에 가면, 이미 지정 않​​았다 일부
이러한 일들이 인덱스가.
그러나 나 구조에 가자 물론 강사의 탭을 선택합니다.
나 인덱스에 지금 클릭하자 다음을 알 수 있습니다.
여기서 지정했는지 기본 키가
ID라는 컬럼에.
이것은 다소 복잡 카디널리티를 지정하는 방법
등을 참조로 바이트 필드의 크기.
하지만 지금은 또 다른이 필드, 물론의 ID, -
수행 과정의 ID 사전에 독특한, OK.
나는이 하나를했다 우리를 위해 사전.
그럼, 왜이 있습니다 - 저에 떨어 뜨려 이 토론을 위해서.
오, 당신은 내가 무슨 짓을했는지 알아?
OK. 그렇게, 이전, 한 GUI 툴을 사용하는 위험과
이 같은 때 우리가 있었다 이 테이블을 조인 만들기
물론 강사 테이블, 내가 지정한 기억
나는 인덱스를 원하는 이 필드에
이에 대한 인덱스 다른 필드.
의 부작용 그 상자를 모두 확인
같은 화면에 그 phpMyAdmin을 그 추론,
내가 원하는하지 두 별도의 인덱스,
나는 조인 인덱스를 원하는 어느 일반적으로 만 도움이됩니다
당신이있을 때 또는 가장 도움 하나의 필드는하지에 검색
하지만 이러한 필드의 양.
우리가 가진 이유입니다 그들이 결합하다
그래서 나는 '원인을 떨어 뜨린 그 내가 의도하지 않았다.
오히려, 내가 갈거야 여기를 다시 실행합니다.
난 코스 ID로 갈거야
더 아래에 난 그냥 인덱스를 추가 말 것.
그리고 아래에 갈거야 강사의 ID와 인덱스를 추가 말한다.
그리고 지금 우리는 여기를 클릭하면 우리는 3 개의 인덱스가 주목
하나의 기본 및 I로 각 하나를 의도
이러한 외래 키.
그리고 나는 외국 때문에 전화 이 테이블의지도에 코스 ID
어떤 분야, 그냥 할 수 다른 테이블에서 취소합니다.
ID라는 기본 키, 과목라는 테이블,
다른 하나 같은 거래.
하지만 지금은 흥미로운입니다 트릭 정말 기술.
난 그냥 나서서 나를 보자 그 조금 더 천천히 않습니다.
같은 화면에서 예고 그것은 여기에 관계보기를 말합니다.
나는 이것을 클릭하고 지금은 알 수 몇 가지 제약 조건을 얻을.
그래서, 그나 중 하나는
개념적으로 사용뿐만 아니라 외래 키와 다른 테이블
처럼 우리는 단지에했습니다 그 인덱스를 정의하여
그들에 당신은 할 수 있습니다 데이터베이스의 도움을 당신이 더
무결성을 보장 해당 필드의.
특히, 지금 할 수있는 이 드롭을 통해 지정
아래 그 과정의 ID 필드
이 테이블에서 실제로 지도에 courses.id합니다.
마찬가지로, 강사 밑줄 ID는 instructors.id에 매핑.
자, 왜이 유용합니다?
음, 오른쪽에, 통지 지금 보이는 것을 편.
지금 가르 칠 수 데이터베이스가있는 경우 헨리
예를 들어 지금까지 은퇴 그의 행이 사라
강사의 테이블에서 모두 이에되는
삭제,이를 통해 할 수 있습니다 접근이 보장 계단식
그가 가르치는 모든 과정이 있다는 것을 더 이상 그와 관련이 없습니다.
나는 데이터베이스를 가르 칠 수 행을 삭제합니다
이 소위에 참여 테이블 자동 헨리 경우 또는 경우 하나
그의 코스로 사라집니다.
자, 왜이 경쟁력이다?
그래?
[청취 비고]
당신은 한 번만해야 및 장기, 오른쪽?
그것은 매우 쉬운 종류의 경우 사람들이 왕래하고, 과정이 올
그리고, 이동 데이터베이스는 할 수 다만 과정 산재받을
교수와 더 없는지 데이터 세트에 더 이상 관련.
그리고 당신의 데이터는 얻을 시작 매우 지저분하고 더러운 부패
그래서 여기에 우리가 정렬 할 수 있습니다
의 일부를 집행 이러한 제약.
그래?
[청취 비고]
그것은이의 방법으로 알고있다.
이는 화면이다 우리는 연결을 지정하는
외래 키 사이 기본 키.
그래서 이름의 모든 내가 언급 규칙
이전에 단지 규칙이 있습니다.
어떤 고유의 의미가 없습니다.
이는 화면이며 만 유용하다
당신은 인덱스에 지정된 후 이러한 각 필드에 우리가 그랬던 것처럼.
이 드롭 다운에 대해 우리가 가지고있는 예를 들어 몇 가지
과정은 당신이 할 수있는 삭제 된 경우 실제로 삭제를 방지
일어나는 경우가 이 테이블의 행입니다
다만 말씀으로, 제한합니다.
환언 헨리 은퇴 할 수 없습니다
우리는 그를 분리 될 때까지 CS51 및 CS1에서.
그래서 좋은거야.
그러나 트리거 할 수 코드에서 오류
당신은 예상하지 않는 경우, 또는 우리는 폭포를 할 수 있습니다,
좋아하는 유사한 폭포 CSS 스타일 시트
와 연계 폭포는 것을 의미하는 경우 -
헨리는 이렇게 은퇴하는 경우 - 도 삭제하여
그래서 여기에 자신의 행 것 로 삭제.
조치가 아무것도 null를 의미 종류의 경우 유용 종류
몇 가지 역사적 기록을 할 헨리 CS51을 가르쳐 데,
하지만 당신은 그 분야를하려는 null 일 수 있도록이 행
하지만 더 이상 아니다 그와 관련.
그래서이 매우 강력하다 기술 당신이 할 수
하고 생각도 사용한다 관심 특히
의 자신에서 당신을 저장.
그래서 내가 언급을 만들어 보자 여기에 마지막 세부 사항의 커플,
재료가 어떤 그 도움이 될 수 있습니다
우리는 데이터베이스 설계에 대한 계획으로.
당신은 또한 선택의 여지가 데이터베이스 엔진에
당신은 당신의 코드에서 사용하는 것이.
당신은 잘 알고 있다면 CS161의 당신은 수도 -
또는 61, 당신은 일반적으로 수도 파일 시스템에 대해 잘 알고 있어야.
그리고 일이 있어요 같은, NTFS 및 HFS +
및 X2FS4 [음성] 3 등.
여러 가지 방법이있다 의 책상에 데이터를 저장하는 단계를 포함한다.
마찬가지로 거기 데이터를 저장하는 다른 방법
기본적으로 데이터베이스에 기기에 이상
최신 버전 MySQL을.
우리가 사용했던 NoDB라는 데이터베이스 엔진,
어떤 지원 몇 가지 좋은 기능을 제공합니다.
그러나 또 다른 일반적인 하나는 또한 라고 MYISAM과 또 다른
즉, 사용 메모리입니다 될 수 있습니다 아무것도 넣지 않는 것을 의미합니다
디스크에, 그냥 계속 메모리에있는 것들.
대부분의 경우 당신이 아마 단지 시작하는 잘못되지 않습니다
NoDB을 가진, 그러나 어떤 프로젝트에 대한 높은 속도를 포함하는 경향이
예를 들어 삽입, 같은 빠른 기록을 많이,
초당 수백 가지의 또는 사물의 수천.
언제든지 당신은이 가는 물건을 많이
데이터베이스에 다음이 종류의
낮은 수준의 결정 참여하기 시작합니다.
전체 텍스트 기능에 대한 인스턴스는 MYISAM 작동
그래서 의미가 있습니다.
하지만하자,이 리콜 할 수 있습니다 우리가 걱정하는 이유 적어도 동기를 부여
특히 NoDB에 대한.
경쟁 조건 일반적으로 무엇을 의미?
좋아,이입니다 예를 암시 일부
의 당신은에 들었을 수도 있습니다 년 지난 여부를 161 또는 50
당신은 룸메이트를하는 경우, 둘은 정말, 우유를 좋아하는
둘 중 하나가 열립니다 먼저 집에 도착 어떤 우유가 없다 냉장고,
에서 냉장고 거리를 닫습니다 CVS에 거리와 도착
라인에 약간의 우유를 구입합니다.
한편, 룸메이트 여기로 온다.
그녀는 또한 우유를 좋아한다.
냉장고를 열고 더 우유를 실현하지 않습니다.
여기에 그녀는 다음에 간다 아마 다른 CVS를 저장합니다.
빠른 앞으로 몇 분 나중에는 이제 모두 다시 와서
의 당신이 우유를 구입했습니다.
그 중 하나는 지금 것입니다 당신이하지 않기 때문에 망칠 수
우유처럼 그 정도와 이것은 바로, 문제가?
둘은 검사 때문에 일부 변수의 상태
과를 기반으로 결정을 그것에도 불구하고 상태
그 변수의 본질적했다 변경되는 과정에서,
모두가 이상 천천히 수 걸리는 시간의 양
CVS와에서 얻을 수 있습니다.
그래서 바보 실제의 일종이다 세계 그 문제에 대한 해결책?
오른쪽 메모를 남겨?
그것은 마지막으로 일어났다.
항상 메모를 남기거나 말 그대로 일을 자물쇠.
그리고 자물쇠 때문에 말 당신이 걸릴 할 또는 CS161을 쓴다면,
잠금 근본적인 세계의 종류의 아이디어.
따라서 경쟁 상태가 발생할 수 있습니다 또한 데이터베이스의 세계에서
당신은 어쩌면 불러올 수 있습니다 당신이 50를 쓴다면 CS50는 금융
우리가 실제로 준 코드 사양 너희들
당시 있도록 작업은 그래서 원자라고합니다.
이에, 원한다면 경우, 주식의 몫을 구입
그 주식이 어떤 특별한 상징.
우리는 당신과 같은 코드를 사용하는 말 이 때문에이 방식으로
중복 키 업데이트에 대한 내장 구문,
MySQL의에 효과적으로있어 삽입에 어느 경우
또는 후 갱신 볼을 선택을하고
재고가 이미있는 경우.
즉, 소재 아날로그 주식을 사기의 세계
우유와 냉장고의 , 첫 번째가 될 수 있습니다
의 점유율을 구입하기 전에 구글은 당신이 선택 할 수 있습니다
데이터베이스에서의 모든 다윗이 소유하고있는 구글의 주식
그는 0 개 이상을 소유 한 경우 볼 수 있습니다.
그가 소유하고있는 경우에는 확인 후 제로 또는 당신이 더
다음에 다음을 수행.
당신은 삽입을해야 하나
그는 제로 '원인을 소유하는 경우 다윗에 대한 행이 아직 없다
또는 당신이 업데이 트를 할 필요가 적어도 이론적으로는 당신이 원하는 경우
사용자 당 하나의 행을 가지고.
문제는 선택하는 것입니다 주식의 수
다음 업데이트하거나 삽입이 중단 될 수있다
다른에서 다른 사람에 의해 구매하려고 컴퓨터 단말기
또는 다윗의 일부를 판매 주식의 공유 여부
좋은 목적이나 종류 악의적 인 목적의.
이 가게에가는처럼 룸메이트가 돌아 오면
및 상태 확인 변수.
그래서 시간이 구문 종류의 적절한이었다
CS50에 대한 것을 방지 모두 문제.
그리고 그것은 단지 모든 작업을 수행 당신을 위해 잠금의 마술,
하지만 지금은 이러한 종류의 이 과정에 대한 프로젝트
어떤 가능성이 가장 높은 것 더 복잡한 데이터 세트를 포함하는,
는 달성 할 수없는 항상 자성.
모든 발생 한 번 또는 전혀
중단없이 그래서 우아하게.
그리고 MySQL은, 다른 데이터베이스 엔진,
잠금이라고 지원 것들
당신은 자물쇠에게이 말을 수있다 테이블 있도록 하나의 치료
일반적으로 하나의 사용자 수 어느 시점에 터치
읽거나 쓸 수 당신은 잠금을 해제 할 수 있습니다.
이것은 하나의 예입니다 MySQL은 자신의 참조,
어디 은행처럼이있는 경우 당신이 노력하고 계정
에서 돈을 공제 다음에 돈을 추가 할 수 있습니다.
당신은 할 수 있습니다 반드시 모두 있는지 확인
그런 일이 함께 발생
더는 없다 있도록 수학적 오류
아무도 손실 없음 어떻게 든 돈.
잠금 문제 데이터베이스 인 것처럼
전체적으로 의미 전체 테이블이 잠 깁니다,
이는 당신이 가지고있는 경우에 의미 시도 백명
은행과 함께 사업을 할 같은 양의 온라인
시간의 단 하나의 그것들은 한번에 갈 수있다.
바보, 특히 어느 서버의 요즘
여덟 물론, 16이 그 물론, 엄청난 금액을 가지고
메모리, 거기에 아무 모두를 직렬화하는 이유
트랜잭션의 경우 그 고객은 가고있다
자신의 행과 상호 작용할 수 있습니다.
그래서 NoDB 당신이 할 수 있습니다 상황이 더 지능
이것은 일반적으로 될 것입니다 당신이 코드를 가지고 접근,
당신이 뭔가를 사용할 때 거래를했다.
그리고 당신은 일반적으로이 작업을 수행 PHP 코드,
루비 코드, 파이썬, 뭐든간에.
그러나 SQL 코드의 해당 궁극적으로,이는 사용
일반적으로.
당신이 다음 트랜잭션을 시작 두 개 이상의 쿼리를 지정
당신이 원하는 것을 모두 실행
중단없이 또는 전혀.
심지어 일부있을 수 있습니다 에 문을 선택
또는 일부 삭제 또는 업데이트.
하지만 좋은 점은 그 데이터베이스는 충분히 영리 될 것입니다
확인에만 것입니다 있는지 확인합니다 실제로하고있는 행을 잠
이 업데이트에 포함 또는 선택하거나 삭제합니다.
당신은 수천 개의 행을 가지고 그래서 경우 당신은 단지 세 가지를 터치하고
그 중, 부분 집합만을 테이블에 고정됩니다
그 다른 99을 의미하는 고객은 행을 만질 수
연재되지 않고 당신에 의해 아래로 둔화.
한편,이 코드가 가장 좋은 방법입니다 거래 형태.
그들은에서 거래입니다 파일 시스템 (161)과 같이 감지,
그들은 트랜잭션입니다
이는 당신이 롤백 할 수 있음을 의미 그 뒤로, 당신이 그들을 취소 할 수 있습니다.
이 명령처럼 또는 데이터베이스의 F를 제어 할 수 있습니다.
당신은 부분을 발견 한 경우 방법을 통해 모든
당신의 각종 데이터 조작, 촬영, 뭔가 잘못된 것입니다.
당신은 말 그대로 실행 다시 다른 SQL 쿼리 롤
이러한 추세의 모든 - 모든 당신이 실행 된 문
시작 말을 한 후 거래는 사라
그들은 아무 일도 결코 것처럼
놀라 울 정도입니다 강력한 것.
그리고 이러한 종류의 수 있습니다 것을 확실히 (50) 우리 종류
의 양탄자 밑에 쓸어 당신은 종류의 가정
모두 잘 될 것입니다.
그러나 당신이 시작하면 실제 프로젝트에 대한 생각
실제 사용자와 데이터베이스의 무결성,
이러한 종류는 디자인 결정
그 중요 할 것입니다.