다음을 통해 공유


자습서: Azure SQL Database에서 관계형 데이터베이스 디자인

적용 대상: Azure SQL Database

Azure SQL 데이터베이스는 Microsoft Azure의 관계형 DBaaS(Database-As-A-Service)입니다. 이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • 데이터베이스에 연결
  • Table SQL 명령 테이블 만들기
  • BCP를 사용하여 데이터 대량 로드
  • T-SQL 명령을 사용한 데이터 쿼리

참고 항목

이 자습서에서는 Azure SQL 데이터베이스를 사용하고 있습니다. 탄력적 풀 또는 SQL Managed Instance에서 풀링된 데이터베이스를 사용할 수도 있습니다. SQL Managed Instance에 대한 연결은 SQL Managed Instance 빠른 시작을 참조하세요. 빠른 시작: Azure SQL Managed Instance에 연결하도록 Azure VM 구성빠른 시작: 온-프레미스에서 Azure SQL Managed Instance로의 지점 및 사이트 간 연결 구성.

필수 조건

Azure Portal에 로그인

Azure Portal에 로그인합니다.

서버 수준 IP 방화벽 규칙 만들기

Azure SQL 데이터베이스는 서버 수준에서 IP 방화벽을 만듭니다. 방화벽 규칙에서 특정 IP가 방화벽을 통과하도록 허용하지 않는 한 이 방화벽은 외부 애플리케이션과 도구가 서버 및 서버의 데이터베이스에 연결하지 못하게 차단합니다. 데이터베이스에 대한 외부 연결을 사용하려면 먼저 IP 주소(또는 IP 주소 범위)에 대한 IP 방화벽 규칙을 추가해야 합니다. 다음 단계에 따라 서버 수준 IP 방화벽 규칙을 만듭니다.

중요

Azure SQL Database는 포트 1433을 통해 통신합니다. 회사 네트워크 내에서 이 서비스에 연결을 시도하면 포트 1433을 통한 아웃바운드 트래픽을 네트워크 방화벽에서 허용하지 않을 수 있습니다. 이 경우 관리자가 1433 포트를 열지 않으면 데이터베이스에 연결할 수 없습니다.

  1. 배포가 완료되면 Azure Portal 메뉴에서 SQL 데이터베이스를 선택하거나아무 페이지에서 SQL 데이터베이스를 선택합니다.

  2. SQL 데이터베이스 페이지에서 데이터베이스를 선택합니다. 데이터베이스에 대한 개요 페이지가 열리고, 정규화된 서버 이름(예: contosodatabaseserver01.database.windows.net)을 표시하고, 추가 구성 옵션을 제공합니다.

    서버 이름이 강조 표시된 Azure Portal 데이터베이스 개요 페이지의 스크린샷

  3. SQL Server Management Studio에서 서버 및 데이터베이스에 연결하는 데 사용할 수 있도록 이 정규화된 서버 이름을 복사합니다.

  4. 설정에서 네트워킹을 선택합니다. 퍼블릭 액세스 탭을 선택한 다음, 공용 네트워크 액세스에서 선택한 네트워크를 선택하여 방화벽 규칙 섹션을 표시합니다.

    서버 수준 IP 방화벽 규칙을 설정할 위치를 보여 주는 Azure Portal 네트워킹 페이지의 스크린샷

  5. 도구 모음에서 클라이언트 IPv4 추가를 선택하여 현재 IP 주소를 새 IP 방화벽 규칙에 추가합니다. IP 방화벽 규칙은 단일 IP 주소 또는 IP 주소의 범위에 1433 포트를 열 수 있습니다.

  6. 저장을 선택합니다. 서버의 1433 포트를 여는 현재 IP 주소에 서버 수준 IP 방화벽 규칙이 생성됩니다.

  7. 확인을 선택한 다음, 방화벽 설정 페이지를 닫습니다.

이제 IP 주소가 IP 방화벽을 통과할 수 있습니다. 이제 SQL Server Management Studio 또는 원하는 다른 도구를 사용하여 데이터베이스에 연결할 수 있습니다. 이전에 만든 서버 관리자 계정을 사용해야 합니다.

중요

기본적으로 모든 Azure 서비스에는 SQL Database IP 방화벽을 통한 액세스가 사용됩니다. 이 페이지에서 끄기를 선택하여 모든 Azure 서비스에 대해 사용하지 않도록 설정합니다.

데이터베이스에 연결

Azure SQL 데이터베이스는 논리 SQL 서버 내에 있습니다. 로그인을 사용하여 논리 SQL Server master에 연결한 다음 데이터베이스에 연결할 수 있습니다. 또는 포함된 사용자를 사용하여 Azure SQL 데이터베이스에 직접 연결할 수 있습니다.

SQL Server Management Studio를 사용하여 Azure SQL 데이터베이스 서버에 연결합니다.

  1. SQL Server Management Studio를 엽니다.

  2. 서버에 연결 대화 상자에 다음 정보를 입력합니다. 다른 옵션은 기본값으로 둡니다.

    설정 제안 값 설명
    서버 유형 데이터베이스 엔진 이 값은 필수입니다.
    서버 이름 정규화된 Azure SQL 데이터베이스 논리 서버 이름 예들 들어 your_logical_azure_sql_server.database.windows.net입니다.
    인증 SQL Server 인증 SQL Server 인증을 사용하여 사용자 이름과 암호를 입력합니다.
    Microsoft Entra 인증 Microsoft Entra ID를 사용하여 연결하려면 Microsoft Entra 서버 관리자인 경우 Microsoft Entra MFA를 선택합니다. 자세한 내용은 Azure SQL에서 Microsoft Entra 인증 구성 및 관리를 참조하세요.
    로그인 서버 관리자 계정 SQL Server 인증을 사용하는 경우 서버를 만들 때 지정한 계정입니다.
    암호 서버 관리자 계정의 암호 SQL Server 인증을 사용하는 경우 서버를 만들 때 지정한 암호입니다.

    SSMS(SQL Server Management Studio)의 Azure SQL 데이터베이스 논리 서버에 연결 대화 상자 스크린샷입니다.

  3. 옵션을 선택하여 서버에 연결 대화 상자를 펼칩니다. 데이터베이스에 연결 섹션에서 yourDatabase를 입력하여 이 데이터베이스에 연결합니다.

    SSMS(SQL Server Management Studio)의 서버 연결 대화 상자 옵션 탭 스크린샷

  4. 연결을 선택합니다. SSMS에서 개체 탐색기 창이 열립니다.

  5. 개체 탐색기에서 데이터베이스를 확장한 다음, yourDatabase를 확장하여 샘플 데이터베이스에 있는 개체를 봅니다.

    개체 탐색기의 데이터베이스 개체를 보여 주는 SSMS(SQL Server Management Studio) 스크린샷

  6. 개체 탐색기에서 yourDatabase를 마우스 오른쪽 단추로 클릭하고 새 쿼리를 선택합니다. 데이터베이스에 연결된 비어 있는 쿼리 창이 열립니다.

데이터베이스에 테이블 만들기

Transact-SQL을 사용하여 대학의 학생 관리 시스템을 모델링하는 네 개의 테이블 만들기:

  • Person
  • Course
  • Student
  • Credit

다음 다이어그램에서는 이러한 테이블 간의 관계를 보여줍니다. 이러한 테이블 중 일부는 다른 테이블의 열을 참조합니다. 예를 들어 Student 테이블은 Person 테이블의 PersonId 열을 참조합니다. 다이어그램에 대해 학습하여 이 자습서에서 테이블 간의 관계를 이해합니다. 효과적인 정규화된 데이터베이스 테이블을 만드는 방법에 대한 자세한 내용은 정규화된 데이터베이스 설계를 참조하세요. 데이터 형식을 선택하는 방법은 데이터 형식을 참조하세요. 기본적으로 테이블은 기본 dbo 스키마에서 만듭니다. 예를 들어 테이블의 두 부분으로 된 이름은 dbo.Person이 됩니다.

참고 항목

또한 SQL Server Management Studio의 테이블 디자이너를 사용하여 테이블을 만들고 디자인할 수도 있습니다.

테이블 관계를 보여 주는 SSMS(SQL Server Management Studio)의 테이블 디자이너 스크린샷

  1. 쿼리 창에서 다음 T-SQL 쿼리를 실행하여 데이터베이스에 4개의 테이블을 만듭니다.

    -- Create Person table
    CREATE TABLE Person
    (
        PersonId INT IDENTITY PRIMARY KEY,
        FirstName NVARCHAR(128) NOT NULL,
        MiddelInitial NVARCHAR(10),
        LastName NVARCHAR(128) NOT NULL,
        DateOfBirth DATE NOT NULL
    )
    
    -- Create Student table
    CREATE TABLE Student
    (
        StudentId INT IDENTITY PRIMARY KEY,
        PersonId INT REFERENCES Person (PersonId),
        Email NVARCHAR(256)
    )
    
    -- Create Course table
    CREATE TABLE Course
    (
        CourseId INT IDENTITY PRIMARY KEY,
        Name NVARCHAR(50) NOT NULL,
        Teacher NVARCHAR(256) NOT NULL
    )
    
    -- Create Credit table
    CREATE TABLE Credit
    (
        StudentId INT REFERENCES Student (StudentId),
        CourseId INT REFERENCES Course (CourseId),
        Grade DECIMAL(5,2) CHECK (Grade <= 100.00),
        Attempt TINYINT,
        CONSTRAINT [UQ_studentgrades] UNIQUE CLUSTERED
        (
            StudentId, CourseId, Grade, Attempt
        )
    )
    

    테이블 생성 스크립트가 성공적으로 실행되었음을 보여 주는 SSMS 스크린샷

  2. 새로 만든 4개의 테이블을 보려면 개체 탐색기에서 yourDatabase 아래에 있는 테이블 노드를 확장합니다.

테이블에 데이터 로드

  1. 로컬 워크스테이션 다운로드 폴더에 sampleData라는 폴더를 만들어 데이터베이스의 샘플 데이터를 저장합니다. 예들 들어 c:\Users\<your user name>\Downloads입니다.

  2. 다음 링크를 마우스 오른쪽 단추로 클릭하고 sampleData 폴더에 샘플 데이터를 저장합니다.

  3. 새 Windows 명령 프롬프트 창을 열고 sampleData 폴더로 이동합니다. 예들 들어 cd c:\Users\<your user name>\Downloads입니다.

  4. 다음 bcp 명령을 실행하여 테이블에 샘플 데이터를 삽입하고 서버, 데이터베이스, 사용자암호 값을 해당 환경에 맞는 값으로 바꿉니다.

    bcp Course in SampleCourseData -S <server>.database.windows.net -d <database> -U <user> -P <password> -q -c -t ","
    bcp Person in SamplePersonData -S <server>.database.windows.net -d <database> -U <user> -P <password> -q -c -t ","
    bcp Student in SampleStudentData -S <server>.database.windows.net -d <database> -U <user> -P <password> -q -c -t ","
    bcp Credit in SampleCreditData -S <server>.database.windows.net -d <database> -U <user> -P <password> -q -c -t ","
    

이제 앞에서 만든 테이블에 샘플 데이터가 로드되었습니다.

쿼리 데이터

다음 T-SQL 쿼리를 실행하여 데이터베이스 테이블에서 정보를 검색합니다.

이 첫 번째 쿼리는 4개의 테이블을 모두 조인하여 'Dominick Pope' 선생님의 학생 중에 성적이 75%보다 높은 학생을 찾습니다. 쿼리 창에서 다음 T-SQL 쿼리를 실행합니다.

-- Find the students taught by Dominick Pope who have a grade higher than 75%
SELECT  person.FirstName, person.LastName, course.Name, credit.Grade
FROM  Person AS person
    INNER JOIN Student AS student ON person.PersonId = student.PersonId
    INNER JOIN Credit AS credit ON student.StudentId = credit.StudentId
    INNER JOIN Course AS course ON credit.CourseId = course.courseId
WHERE course.Teacher = 'Dominick Pope'
    AND Grade > 75;

이 쿼리는 4개의 테이블을 모두 조인하여 'Noe Coleman'이 등록한 적이 있는 과정을 찾습니다. 쿼리 창에서 다음 T-SQL 쿼리를 실행합니다.

-- Find all the courses in which Noe Coleman has ever enrolled
SELECT  course.Name, course.Teacher, credit.Grade
FROM  Course AS course
    INNER JOIN Credit AS credit ON credit.CourseId = course.CourseId
    INNER JOIN Student AS student ON student.StudentId = credit.StudentId
    INNER JOIN Person AS person ON person.PersonId = student.PersonId
WHERE person.FirstName = 'Noe'
    AND person.LastName = 'Coleman';

SQL 쿼리 작성에 대한 자세한 내용을 위해 자습서: Transact-SQL 문 작성을 방문하세요.

.NET 애플리케이션 개발을 시작할 준비가 되셨나요? 다음 평가판 Learn 모듈을 사용하면 간단한 데이터베이스 생성을 포함하여 Azure SQL 데이터베이스를 쿼리하는 ASP.NET 애플리케이션을 개발하고 구성하는 방법을 배울 수 있습니다.

다음 단계

Visual Studio 및 C#을 사용하여 데이터베이스를 설계하는 방법에 대한 자세한 내용을 알아보려면 다음 자습서로 이동합니다.